Как получить текущий URL в шаблоне Django? - PullRequest
273 голосов
/ 21 мая 2010

Мне было интересно, как получить текущий URL в шаблоне.

Скажите, что мой текущий URL:

.../user/profile/

Как мне вернуть это в шаблон?

Ответы [ 7 ]

277 голосов
/ 15 апреля 2012

Вы можете получить 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)
    )
173 голосов
/ 08 декабря 2011

Джанго 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 }}
5 голосов
/ 19 октября 2016

Полагаю, что отправка запроса на шаблон полностью избыточна. Я делаю это так

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

##template
{{ app_url }}
5 голосов
/ 15 января 2016

В шаблоне Django
Просто получите текущий URL от {{request.path}}
Для получения полного URL с параметрами {{request.get_full_path}}

Примечание : Вы должны добавить request в Django TEMPLATE_CONTEXT_PROCESSORS

3 голосов
/ 13 июня 2017

Другие ответы были неверны, по крайней мере, в моем случае.request.path не предоставляет полный URL, только относительный URL, например, /paper/53.Я не нашел правильного решения, поэтому в итоге я жестко закодировал постоянную часть URL-адреса в представлении, прежде чем объединить его с request.path.

1 голос
/ 18 января 2015

Это старый вопрос, но его можно суммировать так же легко, как если бы вы использовали django-регистрацию.

В вашей ссылке «Войти и выйти» (скажем, в заголовке вашей страницы) добавьте следующий параметр к ссылке, который будет входить или выходить из системы. Ваша ссылка должна выглядеть следующим образом.

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

Все просто, больше ничего делать не нужно, при выходе они сразу же будут перенаправлены на страницу, на которой они находятся, для входа заполняют форму и затем перенаправляют на страницу, на которой они были. , Даже если они неправильно пытаются войти, он все равно работает.

0 голосов
/ 31 декабря 2017

Приведенные выше ответы верны и дают отличный и короткий ответ.

Я также искал 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>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...