Как получить текущий URL-адрес в шаблоне Django?
мне было интересно, как получить текущий URL в шаблоне.
скажем, мой URL был
/user/profile/
Как вернуть это в шаблон?
7 ответов
Django 1.9 и выше:
## template
{{ request.path }}
{{ request.get_full_path }}
старый:
## settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.request',
)
## views.py
from django.template import *
def home(request):
return render_to_response('home.html', {}, context_instance=RequestContext(request))
## template
{{ request.path }}
вы можете получить URL-адрес в своем шаблоне следующим образом:
<p>URL of this page: {{ request.get_full_path }}</p>
или
{{ request.path }}
Если вам не нужны дополнительные параметры.
некоторые уточнения и исправления должны быть доведены до hypete это и Igancio это ответы, я просто обобщу всю идею здесь, на будущее.
Если вам нужны request
переменной в шаблоне должны добавить - Джанго.ядро.context_processors.запрос' to the TEMPLATE_CONTEXT_PROCESSORS
настройки, это не по умолчанию (Django 1.4).
вы должны также не забудьте другие контекстные процессоры, используемые вашими приложениями. Итак, чтобы добавить запрос к другим процессорам по умолчанию, вы можете добавить это в свои настройки, чтобы избежать жесткого кодирования списка процессоров по умолчанию (который может очень хорошо измениться в более поздних версиях):
from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP
TEMPLATE_CONTEXT_PROCESSORS = TCP + (
'django.core.context_processors.request',
)
тогда, при условии, что вы отправить request
содержание в вашем ответе, например как этот:
from django.shortcuts import render_to_response
from django.template import RequestContext
def index(request):
return render_to_response(
'user/profile.html',
{ 'title': 'User profile' },
context_instance=RequestContext(request)
)
в шаблоне django
Просто получить текущий url от {{request.path}}
Для получения полного url с параметрами {{request.get_full_path}}
Примечание:
Вы должны добавить request
в Django TEMPLATE_CONTEXT_PROCESSORS
Я полагаю, что отправить в шаблон полный запрос немного избыточен. Я делаю это так
def home(request):
app_url = request.path
return render(request, 'home.html', {'app_url': app_url})
##template
{{ app_url }}
другие ответы были неверными, по крайней мере в моем случае. request.path
не предоставляет полный url, только относительный url, например /paper/53
. Я не нашел правильного решения, поэтому я закончил жесткое кодирование постоянной части url-адреса в представлении, прежде чем объединить его с request.path
.
Это старый вопрос, но его можно суммировать так же легко, как это, если вы используете django-registration.
в ссылке Вход и выход (скажем, в заголовке страницы) добавьте следующий параметр в ссылку, которая перейдет в login или logout. Ваша ссылка должна выглядеть так.
<li><a href="http://www.noobmovies.com/accounts/login/?next={{ request.path | urlencode }}">Log In</a></li>
<li><a href="http://www.noobmovies.com/accounts/logout/?next={{ request.path | urlencode }}">Log Out</a></li>
это просто, ничего больше не нужно делать, после выхода из системы они будут немедленно перенаправлены на страницу, на которой они находятся, для входа в систему, они заполнят форму и это затем перенаправит на страницу, на которой они были. Даже если они неправильно пытаются войти в систему, он все равно работает.
выше ответы правильные, и они дают большой и короткий ответ.
Я также искал получение url текущей страницы в шаблоне Django, поскольку мое намерение состояло в том, чтобы активировать HOME page
, MEMBERS page
, CONTACT page
, ALL POSTS page
, когда они просят.
я вставляю часть фрагмента кода HTML, который вы можете увидеть ниже, чтобы понять использование request.path
. Вы можете видеть это в моем live website
at http://pmtboyshostelraipur.pythonanywhere.com/
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<!--HOME-->
{% if "/" == request.path %}
<li class="active text-center">
<a href="/" data-toggle="tooltip" title="Home" data-placement="bottom">
<i class="fa fa-home" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true">
</i>
</a>
</li>
{% else %}
<li class="text-center">
<a href="/" data-toggle="tooltip" title="Home" data-placement="bottom">
<i class="fa fa-home" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true">
</i>
</a>
</li>
{% endif %}
<!--MEMBERS-->
{% if "/members/" == request.path %}
<li class="active text-center">
<a href="/members/" data-toggle="tooltip" title="Members" data-placement="bottom">
<i class="fa fa-users" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true"></i>
</a>
</li>
{% else %}
<li class="text-center">
<a href="/members/" data-toggle="tooltip" title="Members" data-placement="bottom">
<i class="fa fa-users" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true"></i>
</a>
</li>
{% endif %}
<!--CONTACT-->
{% if "/contact/" == request.path %}
<li class="active text-center">
<a class="nav-link" href="/contact/" data-toggle="tooltip" title="Contact" data-placement="bottom">
<i class="fa fa-volume-control-phone" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true"></i>
</a>
</li>
{% else %}
<li class="text-center">
<a class="nav-link" href="/contact/" data-toggle="tooltip" title="Contact" data-placement="bottom">
<i class="fa fa-volume-control-phone" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true"></i>
</a>
</li>
{% endif %}
<!--ALL POSTS-->
{% if "/posts/" == request.path %}
<li class="text-center">
<a class="nav-link" href="/posts/" data-toggle="tooltip" title="All posts" data-placement="bottom">
<i class="fa fa-folder-open" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true"></i>
</a>
</li>
{% else %}
<li class="text-center">
<a class="nav-link" href="/posts/" data-toggle="tooltip" title="All posts" data-placement="bottom">
<i class="fa fa-folder-open" style="font-size:25px; padding-left: 5px; padding-right: 5px" aria-hidden="true"></i>
</a>
</li>
{% endif %}
</ul>