Мне было интересно, как получить текущий URL в шаблоне.
Скажите, что мой текущий URL:
.../user/profile/
Как мне вернуть это в шаблон?
django
django-templates
рехнувшийся
источник
источник
request
шаблону. В Django 1.10 я просто доступ{{request.path}}
в шаблоне, и это работает. По умолчаниюdjango.core.context_processors.request
уже настроен в settings.py, если вы использовалиstartproject
Ответы:
Джанго 1.9 и выше:
Старый:
источник
render_to_response
и нетrender_to_request
. И вы не можете определить,TEMPLATE_CONTEXT_PROCESSORS
как вы делаете в settings.py, не упоминая другие процессоры по умолчанию, которые вполне могут быть использованы в шаблонах!request.path
не включает параметры запроса, такие как?foo=bar
. Используйтеrequest.get_full_path
вместо этого.Вы можете получить URL в вашем шаблоне следующим образом:
или
{{ request.path }}
если вам не нужны дополнительные параметры.Некоторые уточнения и исправления должны быть доведены до hypete - х и Igancio в ответах, я просто суммировать всю идею здесь, для справки в будущем.
Если вам нужна
request
переменная в шаблоне, вы должны добавить 'django.core.context_processors.request' вTEMPLATE_CONTEXT_PROCESSORS
настройки, это не по умолчанию (Django 1.4).Вы также не должны забывать другие контекстные процессоры, используемые вашими приложениями. Таким образом, чтобы добавить запрос к другим процессорам по умолчанию, вы можете добавить это в свои настройки, чтобы избежать жесткого кодирования списка процессоров по умолчанию (который может очень хорошо измениться в более поздних версиях):
Затем при условии, что вы отправите
request
содержимое в своем ответе , например, так:источник
request
в контекст.Note that a settings file should not import from global_settings, because that’s redundant
return render(request, 'user/profile.html', {'title': 'User profile'})
короче{{request.get_full_path|urlenode}}
если вы перенаправляетеКод ниже помогает мне:
источник
В шаблоне django
просто получить текущий URL из
{{request.path}}
Для получения полного URL с параметрами
{{request.get_full_path}}
Примечание : вы должны добавить
request
в DjangoTEMPLATE_CONTEXT_PROCESSORS
источник
Я полагаю, что отправка полного шаблона запроса немного избыточна. Я делаю это так
источник
Другие ответы были неверны, по крайней мере, в моем случае.
request.path
не предоставляет полный URL, только относительный URL, например/paper/53
. Я не нашел правильного решения, поэтому в конечном итоге я жестко запрограммировал постоянную часть URL-адреса в представлении перед его конкатенациейrequest.path
.источник
Оба
{{ request.path }} and {{ request.get_full_path }}
возвращают текущий URL, но не абсолютный, например:Так что вам придется сделать что-то вроде
Тем не менее, вы можете получить абсолютный URL, используя (благодаря ответу выше)
Примечание: Вы не должны включать
request
вsettings.py
, это уже есть.источник
Это старый вопрос, но его можно суммировать так же легко, как если бы вы использовали django-регистрацию.
В вашей ссылке «Войти и выйти» (скажем, в заголовке вашей страницы) добавьте следующий параметр к ссылке, который будет входить или выходить из системы. Ваша ссылка должна выглядеть следующим образом.
Все просто, больше ничего делать не нужно, после выхода из системы они будут немедленно перенаправлены на страницу, на которой они находятся, для входа в систему они заполнят форму, а затем перенаправят на страницу, на которой они находились. Даже если они неправильно пытаются войти, он все равно работает.
источник
{{ request.path|urlencode }}
Приведенные выше ответы верны и дают отличный и короткий ответ.
Я также искал для получения URL текущей страницы в шаблоне Django , как мое намерение было активировать
HOME page
,MEMBERS page
,CONTACT page
,ALL POSTS page
когда они просят.Я вставляю фрагмент кода HTML, который вы можете увидеть ниже, чтобы понять, как его использовать
request.path
. Вы можете увидеть это в моемlive website
на http://pmtboyshostelraipur.pythonanywhere.com/источник
active
класс к каждомуli
элементу, почему бы просто не сделать это встроенным в одинli
элемент:<li class="{% if "/contact/" == request.path %}active {% endif %}text-center">....</li>
вместо гигантского блока if / else для целогоli
? Это спасло бы целую кучу избыточного кода :)В Django 3 вы хотите использовать тег шаблона URL :
Для примера смотрите документацию
источник