답변:
장고 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 }}
render_to_response
, 그리고 render_to_request
. 그리고 당신은 TEMPLATE_CONTEXT_PROCESSORS
템플릿에서 잘 사용될 수있는 다른 기본 프로세서를 언급하지 않고 settings.py에서와 같이 정의 할 수 없습니다 !
request.path
과 같은 검색어 매개 변수는 포함하지 않습니다 ?foo=bar
. request.get_full_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)
)
request
를 사용했으며 컨텍스트 에 추가 할 필요가 없었습니다 .
Note that a settings file should not import from global_settings, because that’s redundant
return render(request, 'user/profile.html', {'title': 'User profile'})
짧은
{{request.get_full_path|urlenode}}
해야합니다. 즉 , 경로를 재지 정하는 경우
둘 다 {{ 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
있습니다.
이것은 오래된 질문이지만 장고 등록을 사용하는 경우 쉽게 요약 할 수 있습니다.
로그인 및 로그 아웃 링크 (페이지 헤더에 표시)에서 다음 매개 변수를 링크에 추가하면 로그인 또는 로그 아웃으로 이동합니다. 귀하의 링크는 다음과 같아야합니다.
<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|urlencode }}
위의 답변은 정확하며 훌륭하고 짧은 답변을 제공합니다.
나는 또한 나의 의도를 활성화했다 장고 템플릿에 현재 페이지의 URL을 점점 찾고 있었다 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>
active
각 li
요소에 클래스 를 추가할지 여부를 확인하는 것이라면 , 하나의 li
요소 내에서 인라인을 수행하는 <li class="{% if "/contact/" == request.path %}active {% endif %}text-center">....</li>
것이 li
어떻습니까? 전체에 거대한 if / else 블록 대신 ? 즉 :) 중복 코드의 전체 무리 절약 할 수
Django 3에서는 URL 템플릿 태그 를 사용하려고합니다 .
{% url 'name-of-your-user-profile-url' possible_context_variable_parameter %}
예를 들어, 설명서를 참조하십시오