0


0

Djangoは正規表現をDBに保存し、ページで評価されます

ユーザーがURLを作成するパラメーターを提供できるdjangoモデルにいくつかのURLパターンを保存したい。

たとえば、次の3つのURLをdbに保存できます。%sはユーザーが提供する変数パラメーターです。

  • www.thisissomewebsite.com?param=%s

  • www.anotherurl /%s /

  • www.lastexample.co.uk?param1=%s&fixedparam=2

これらの例からわかるように、パラメーターは文字列の任意の場所に表示でき、固定位置には表示できません。

私には2つのモデルがあり、1つはURLを保持し、もう1つは変数を保持します:

class URLPatterns(models.Model):
    pattern = models.CharField(max_length=255)

class URLVariables(models.Model):
    pattern = models.ForeignKey(URLPatterns)
    param = models.CharField(max_length=255)

%sをデータベース内の変数で置き換えることにより、これらのURLを生成する最良の方法は何でしょうか。

それは単に文字列の単純な置換でしょうか?

urlvariable = URLVariable.objects.get(pk=1)
pattern = url.pattern
url = pattern.replace("%s", urlvariable.param)

それとももっと良い方法はありますか?

編集ユーザーが単一の変数または変数のリストのいずれかを保存することを選択できれば、文字列内のいくつかの変数を置き換えることもできます

u = URLPatterns(pattern='www.url?param=%s&param2=%s&param3=%s')
v = URLVariables(pattern=u, param='[2,6,3]')

url = SOME WAY TO REPLACE THE 3 %s WITH THE 3 VARIABLES IN THE ARRAY (this would need to be converted from a string in someway)

ありがとう

3 Answer


3


http://docs.python.org/library/ast.html#ast.literal_eval [ast.literal_eval()]を使用して、文字列を解析してPythonの値または構造にできます。 それが list`の場合、文字列補間を使用する前に tuple() `に渡すだけです。


1


>>> param = [2, 6, 3]
>>> pattern = 'www.url?param=%s&param2=%s&param3=%s'
>>> url = pattern % tuple(param)
>>> url
'www.url?param=2&param2=6&param3=3'
  • param *が_ '[2,6,3]' _のような文字列の場合、ast.literal_eval()またはjson.loads()を使用できます。

>>> ast.literal_eval('[2,6,3]')
[2, 6, 3]

or

>>> json.loads(param)
[2, 6, 3]

or

>>> simplejson.loads(param)
[2, 6, 3]


0


あなたはこれを行うことができます:

pattern="www.url?param=%s&param2=%s&param3=%s"
params = "[1, 2, 3]"

url = pattern % tuple(s.strip('[] ') for s in params.split(','))

または、Ignacioが示唆するように `ast.literal_eval(params)`を使用します。