Answers:
Django 1.9及更高版本:
## template
{{ request.path }} # -without GET parameters
{{ request.get_full_path }} # - with GET parameters
旧:
## 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 }}
render_to_response
,不是render_to_request
。而且,您不能TEMPLATE_CONTEXT_PROCESSORS
像在settings.py中那样进行定义,而无需提及模板中可能使用的其他默认处理器!
request.path
不包含的查询参数?foo=bar
。使用request.get_full_path
代替。
您可以像这样在模板中获取URL:
<p>URL of this page: {{ request.get_full_path }}</p>
或
{{ request.path }}
如果您不需要额外的参数。
应该给hypete和Igancio的答案一些精确性和更正,在这里我将总结整个思想,以供将来参考。
如果您需要request
模板中的变量,则必须将'django.core.context_processors.request'添加到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)
)
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}}
如果您要重定向
两者都{{ request.path }} and {{ request.get_full_path }}
返回当前URL,但不返回绝对URL,例如:
your_website.com/wallpapers/new_wallpaper
两者都将返回
/new_wallpaper/
(注意前斜杠和后斜杠)
所以你必须做类似的事情
{% if request.path == '/new_wallpaper/' %}
<button>show this button only if url is new_wallpaper</button>
{% endif %}
但是,您可以使用来获得绝对URL(由于上面的答案)
{{ request.build_absolute_uri }}
注意:您不必包括request
在settings.py
,它已经存在。
这是一个古老的问题,但是如果您使用的是django-registration,则可以像这样简单地总结一下。
在“登录和注销”链接(在页面标题中说)中,将下一个参数添加到链接中,以进行登录或注销。您的链接应如下所示。
<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>
就是这样,无需执行任何其他操作,注销后,它们将立即重定向到他们所在的页面,登录时,他们将填写该表单,然后它将重定向到他们所在的页面。即使他们错误地尝试登录,它仍然有效。
{{ request.path|urlencode }}
以上答案是正确的,它们给出了简短的答案。
我也一直在寻找获得当前页面的URL在Django模板作为我的意图是要激活HOME page
,MEMBERS page
,CONTACT page
,ALL POSTS page
当被要求他们。
我正在粘贴HTML代码段的一部分,您可以在下面看到它,以了解的用法request.path
。您可以live website
在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>
active
类添加到每个li
元素,为什么不直接在一个li
元素内进行内联:<li class="{% if "/contact/" == request.path %}active {% endif %}text-center">....</li>
而不是整个if / else块li
?这样可以节省一大堆多余的代码:)