Django 2 добавление параметра URL после {% url %} вызова в шаблоне

#django #django-request

#django #django-запрос

Вопрос:

Без необходимости изменять мой urls.py Я хочу вручную добавить параметр URL в конец вызова {% url %} в моем шаблоне. Затем, на мой взгляд, я хочу получить доступ к значению этого параметра запроса. Если lang=’fr’, откройте шаблон на французском языке или, если lang=’en’, откройте шаблон на английском языке. Вот мой код:urls.py

 urlpatterns = [
path('<int:topic_id>/', views.tutorials, name='tutorials'),
path('<int:topic_id>/<int:tutorial_id>/', views.topic_tutorial, name='topic_tutorial'),
path('<int:topic_id>/<int:tutorial_id>/<slug:slug>/', views.topic_tutorial, name='topic_tutorial_keywords'),
  

]

views.py

 def topic_tutorial(request, topic_id, tutorial_id, slug=None):
"""Show specific Tutorial by topic"""
# NOTE: nothing is returned 
if (request.GET.get('lang')):
    lang = request.GET.get('lang')

topics = Topic.objects.all()
tutorial = Tutorial.objects.get(topic__id=topic_id, id=tutorial_id)

if request.path != tutorial.get_absolute_url():
    return redirect(tutorial, permanent=True)
# renaming topic to avoid spaces
name = tutorial.topic.text.lower()
if (' ' in name):
    name = "_".join( name.split() )

# renaming tutorial to avoid spaces
tut_name = tutorial.text.lower()
if (' ' in tut_name):
    tut_name = "_".join( tut_name.split() )

# lang always empty
if (lang == 'fr'):
    file = name   "-"   tut_name   "_fr.html"
else:    
    file = name   "-"   tut_name   ".html"

path = 'tutorials/'   file
context = {'tutorial': tutorial,'topics': topics,'file':file}
return render(request, path, context)
  

template.html

 <div class="card-body">
          <h5 class="card-title">{{ tut.text }}</h5>
          <p class="card-text">{{ tut.summary }}</p>
          <p class="card-text">
            <a href="{% url 'topic_tutorial' tut.topic.id tut.id %}?lang=en">English</a> | 
            <a href="{% url 'topic_tutorial' tut.topic.id tut.id %}?lang=fr">French</a></p>
        </div>
  

У меня сложилось впечатление, что мне не нужно добавлять другой параметр в мое определение представления, чтобы получить доступ к добавленному параметру запроса «?lang = fr». Но ничего не передается.

Я был бы признателен за любые предложения.

Ответ №1:

попробуйте это:

 path('<int:topic_id>/<int:tutorial_id>', views.topic_tutorial, name='topic_tutorial'),
  

Комментарии:

1. Это то, что у меня уже есть. Вернется через несколько часов.

2. Я удалил завершающий символ ‘/’ в конце URL

3. path('<int:topic_id>/<int:tutorial_id>/', views.topic_tutorial, name='topic_tutorial'), или path('<int:topic_id>/<int:tutorial_id>', views.topic_tutorial, name='topic_tutorial'), генерирует: UnboundLocalError в /tutorials/6/20/ инфраструктура-создание-загрузочный-usb / локальная переменная ‘lang’, на которую ссылаются перед назначением