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

假设我当前的URL是:

.../user/profile/

如何将此返回到模板?


当前回答

你可以像这样在模板中获取URL:

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

或通过

{{请求。如果不需要额外的参数,则使用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',
)

然后,如果你在响应中发送请求内容,例如:

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 1.9及以上版本:

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

Old:

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

{{请求。路径}}和{{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 }}

注意: 你不需要在settings.py中包含请求,它已经在那里了。

你可以像这样在模板中获取URL:

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

或通过

{{请求。如果不需要额外的参数,则使用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',
)

然后,如果你在响应中发送请求内容,例如:

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

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

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

使用的例子:

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