Подтвердить что ты не робот

Передача переменной urlname в тег url в шаблоне django

Что бы я хотел сделать (для виджета последних изменений "не виджет django" в этом случае) передайте urlname в мой шаблон как переменную, а затем используйте его так: {% url sitechangeobject.urlname %} Где urlname строка, содержащая допустимое имя для URL-адреса.

Возможно ли это? Шаблон продолжает ломаться, говоря, что он не может найти sitechangeobject.urlname как имя (что совершенно правильно, его не существует). Есть ли способ заставить его заглянуть внутрь этой переменной?

Есть другие способы решить эту проблему, если нет, просто подумайте, что я бы проверял.

Спасибо!

4b9b3361

Ответ 1

Как и в Django 1.3, тег {% url %} корректно поддерживает:

{% url view_name_variable %}
{% url 'view_name_string' %}

... это становится поведением по умолчанию в Django 1.5.

Раньше у вас была только возможность сделать это:

{% url view_name_string %}

Чтобы заставить тег работать таким образом в проектах Django 1.3 и 1.4, вам понадобится следующая строка в верхней части каждого используемого вами шаблона:

{% load url from future %}

В соответствии с примечаниями к выпуску Django 1.3:

... в Django 1.5, старое поведение будет заменено новым поведением. Чтобы обеспечить совместимость с будущими версиями Django, существующие шаблоны должны быть изменены, чтобы использовать новые будущие библиотеки и синтаксис.

Обратите внимание, что поддержка {% load url from future %} была удалена в Django 1.9.

Ответ 2

Примечание: этот ответ действительно имеет отношение только к версиям django до 1.3. Если вы используете django 1.3 или новее, необходимая функциональность встроена - см. meshy answer.

Встроенный тег url не может этого сделать. Однако django-reversetag делает именно это (и многое другое).

Согласно readme, тег reverse, предоставляемый этим кодом, обеспечивает:

  • Согласованный синтаксис ( "строковые литералы" и переменные)
  • Возможность изменения имен имен, хранящихся в переменных контекста.
  • Частичное реверсирование

Ответ 3

для django 1.5 может быть, это полезно

обычно, для доступа к переменной, переданной из представления мы используем {{Переменная}}

однако для URL-адреса в шаблоне следующее не работает: {% url 'app: namespace' {{varible}}%}

просто используйте следующее: {% url 'app: namespace' varible%}

Ответ 4

если вы используете Django 1.5 и выше, django-reverseetags больше не требуется для просто передавать имена имен в качестве переменных в шаблоны, которые будут использоваться в теге url.

Я был смущен наличием джанго-реверсагатов, просто подумал о том, чтобы правильно обновить этот вопрос.