Django использует переменную из шаблона внутри urls.py
Мне нужно создать меню, а названия пунктов/ссылки в меню должны генерироваться динамически. Итак, у меня есть следующий код, который работает и перечисляет все пункты меню.
views.py:
def idf1(request):
return render(request, 'idfs/idf.html')
base.html:
{% extends 'base.html' %}
{% block idfs %}
{% for each in idf_list %}
<li>
<a href="/idfs/{{each}}">{{ each }}</a>
</li>
{% endfor %}
{% endblock %}
urls.py
url(r'^idfs/{{each}}$', myapp.views.idf),
Это выглядит очень глупо. потому что я использовал {{each}}, надеясь, что переменная base.html доступна в urls.py
Как я могу использовать переменную внутри моего urls.py? Возможно ли это вообще?
(NB: я предполагаю, что вы находитесь на ранней версии django, основываясь на использовании 'url' в urls.py, а не 'path')
Предполагая, что idf_list - это не объекты db, а просто список простых переменных, таких как, скажем, трехзначные целые числа, вы могли бы сделать что-то вроде этого.
views.py:
#provide current idf via argument to view. Default is 111
def idf1(request, idf="111"):
#pass current idf to template as idf_context
context['idf_context'] = idf
return render(request, 'idfs/idf.html', context)
base.html:
{% extends 'base.html' %}
{% load static %}
{% block idfs %}
<ul>
{% for each in idf_list %}
<li>
{% if each == idf_context %} -> <!-- comment: highlight the current idf -->{% endif %}
<!-- use template url tag to generate URL -->
<a href="{% url "idf-page" {{each}} %}" >{{each}}</a>
</li>
{% endfor %}
</ul>
{% endblock %}
urls.py
#here we define the url as possessing a 3 digit idf value eg /idfs/111
url(r'^idfs/?P<idf>[0-9]{3})$', myapp.views.idf, name="idf-page"),