如何在Django模板中获取当前URL ?

我想知道如何在模板中获得当前URL。

假设我当前的URL是:

.../user/profile/

如何将此返回到模板?

347265 次浏览

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 }}

你可以像这样在模板中获取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)
)

这是一个老问题,但如果你在使用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>

这很简单,没有其他需要做的,登出时,他们将立即重定向到他们所在的页面,为了登录,他们将填写表格,然后将重定向到他们所在的页面。即使他们错误地尝试登录,它仍然可以工作。

在django模板中
简单地从\{\{request.path}}
获取当前url 获取完整的url参数\{\{request.get_full_path}}

< p > 请注意: 你必须在django中添加request

我想发送到模板完整的请求有点多余。我这样做

from django.shortcuts import render


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模板中寻找当前页面的url,因为我的意图是激活HOME pageMEMBERS pageCONTACT pageALL POSTS page当他们被请求时。

我粘贴HTML代码片段的一部分,你可以在下面看到,以理解request.path的使用。你可以在我的live websitehttp://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>

下面的代码帮助我:

 \{\{ request.build_absolute_uri }}

\{\{ 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 }}
< p >注意: 你不必在settings.py中包含requests,它已经在那里了

在Django 3中,你需要使用url模板标签:

{% url 'name-of-your-user-profile-url' possible_context_variable_parameter %}

例如,参见文档

For Django >3. 我不改变设置或任何东西。 我在模板文件中添加了下面的代码

\{\{ request.path }}  #  -without GET parameters
\{\{ request.get_full_path }}  # - with GET parameters

view.py中,将请求变量传递给模板文件。

view.py:

def view_node_taxon(request, cid):
showone = get_object_or_404(models.taxon, id = cid)
context = {'showone':showone,'request':request}
mytemplate  = loader.get_template('taxon/node.html')
html = mytemplate.render(context)
return HttpResponse(html)

你可以使用 \{\{request.path}}来获取不带参数的url。 你可以使用\{\{request.get_full_path}}

来获取带参数的url

使用的例子:

 <!-- BRAND -->
<div class="brand">
<div class="logo">
{% if request.get_full_path == '/' %}
<a href="{% url 'front:homepage' %}" class="first-logo big-logo">
<img src="{% static 'assets/images/logo-big.svg' %}"
alt="pozitiv">
</a>


<a href="{% url 'front:homepage' %}" class="second-logo mobile-logo">
<img src="{% static 'assets/images/logo.svg' %}"
alt="<?php echo WEBSITE_NAME; ?>" >
</a>


{% else %}


<a href="{% url 'front:homepage' %}">
<img src="{% static 'assets/images/logo.svg' %}"
alt="<?php echo WEBSITE_NAME; ?>" style="width: 320px; margin: -20px 0 0 0;">
</a>
{% endif %}
</div>
</div>

如果你正在使用渲染部分,最好使用

\{\{ request.path_info }}

它返回页面的确切url

将get参数传递给模板, 你可以通过views.py file

来传递它

例子:

return render(request, 'test.html',{'get_parameter_name' : get_parameter_value})

并在模板中使用如下:

\{\{get_parameter_name}}
如果你也在模板中使用js,你可以这样做:
在你js

document.addEventListener('DOMContentLoaded', function() {
...
getUrl();
}


function getUrl() {
let someDiv = document.querySelector(`#someDiv`);
someDiv.innerHTML = window.location.href;
}

对于你的模板

...
<div id="someDiv"><div>
...