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

时间:2010-05-21 13:34:56

标签: django django-templates

我想知道如何在模板中获取当前网址。

说我当前的网址是:

.../user/profile/

如何将此内容返回模板?

13 个答案:

答案 0 :(得分:277)

您可以在模板中获取网址,如下所示:

<p>URL of this page: {{ request.get_full_path }}</p>

如果您不需要额外的参数,请

{{ request.path }}

应该对hypete'sIgancio's个答案进行一些精确和更正,我将在此总结整个想法,以供将来参考。

如果您需要模板中的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',
)

然后,为您提供send the request contents in your response,例如:

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

答案 1 :(得分:170)

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

答案 2 :(得分:5)

在django模板中 只需从{{request.path}}获取当前网址 获取带参数{{request.get_full_path}}

的完整网址

注意: 您必须在django request

中添加TEMPLATE_CONTEXT_PROCESSORS

答案 3 :(得分:5)

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

def home(request):
    app_url = request.path
    return render(request, 'home.html', {'app_url': app_url})

##template
{{ app_url }}

答案 4 :(得分:3)

其他答案都不正确,至少在我的情况下。 request.path不提供完整的网址,只提供相对网址,例如/paper/53。我没有找到任何正确的解决方案,因此我最终在视图中对网址的常量部分进行了硬编码,然后将其与request.path连接起来。

答案 5 :(得分:3)

{{ 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,因为它已经存在。

答案 6 :(得分:2)

以下代码对我有帮助:

 {{ request.build_absolute_uri }}

答案 7 :(得分:1)

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

就是这样,没有其他任何事情需要做,退出后他们会立即被重定向到他们所在的页面,为了登录,他们将填写表格,然后它将重定向到他们所在的页面。即使他们错误地尝试登录它仍然有效。

答案 8 :(得分:0)

以上答案是正确的,他们给出了很好的答案。

我还想在Django模板中获取当前页面的网址,因为我的目的是在请求时激活HOME pageMEMBERS pageCONTACT pageALL 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>

答案 9 :(得分:0)

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

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

例如,see the documentation

答案 10 :(得分:0)

对于Django> 3 我不更改任何设置。 我将以下代码添加到模板文件中。

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

并在 view.py 中将 request 变量传递到模板文件。

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)

答案 11 :(得分:0)

您可以使用{{request.path}}获取不带参数的网址 您可以使用{{request.get_full_path}}

获取带有参数的网址

答案 12 :(得分:0)

使用示例:

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