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"),
Вернуться на верх