我想知道如何在模板中获得当前URL。
假设我当前的URL是:
.../user/profile/
如何将此返回到模板?
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 }}如果你不需要额外的参数。
\{\{ request.path }}
应该对hypete的和Igancio的的答案进行一些精确和更正,我将在这里总结整个思想,以供将来参考。
如果你在模板中需要request变量,你必须添加django.core.context_processors。request'到TEMPLATE_CONTEXT_PROCESSORS设置,它不是默认的(Django 1.4)。
request
TEMPLATE_CONTEXT_PROCESSORS
你还必须不要忘记你的应用程序使用的其他上下文处理器。所以,要将请求添加到其他默认处理器,你可以在你的设置中添加这个,以避免硬编码默认处理器列表(这在以后的版本中很可能会改变):
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>
这很简单,没有其他需要做的,登出时,他们将立即重定向到他们所在的页面,为了登录,他们将填写表格,然后将重定向到他们所在的页面。即使他们错误地尝试登录,它仍然可以工作。
\{\{request.path}}
\{\{request.get_full_path}}
我想发送到模板完整的请求有点多余。我这样做
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连接起来。
request.path
/paper/53
以上答案是正确的,他们给出了很好的和简短的答案。
我也在Django模板中寻找当前页面的url,因为我的意图是激活HOME page, MEMBERS page, CONTACT page, ALL POSTS page当他们被请求时。
HOME page
MEMBERS page
CONTACT page
ALL POSTS page
我粘贴HTML代码片段的一部分,你可以在下面看到,以理解request.path的使用。你可以在我的live website的http://pmtboyshostelraipur.pythonanywhere.com/中看到它
live website
<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,例如:
\{\{ request.path }} and \{\{ request.get_full_path }}
your_website.com/wallpapers/new_wallpaper 两者都返回/new_wallpaper/ (注意前面和后面的斜杠)
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(感谢上面的答案)
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}}
使用的例子:
<!-- 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
views.py
例子:
return render(request, 'test.html',{'get_parameter_name' : get_parameter_value})
并在模板中使用如下:
\{\{get_parameter_name}}
document.addEventListener('DOMContentLoaded', function() { ... getUrl(); } function getUrl() { let someDiv = document.querySelector(`#someDiv`); someDiv.innerHTML = window.location.href; }
对于你的模板
... <div id="someDiv"><div> ...