Django टेम्पलेट के भीतर वर्तमान URL कैसे प्राप्त करें?


309

मैं सोच रहा था कि एक टेम्पलेट के भीतर वर्तमान URL कैसे प्राप्त किया जाए।

मेरा वर्तमान URL कहें:

.../user/profile/

मैं इसे खाके पर कैसे लौटाऊंगा?



2
नीचे दिए गए सभी उत्तरों से मुझे लगा कि मुझे requestकिसी टेम्पलेट में पहुँच प्राप्त करने के लिए कुछ जिम्नास्टिक करने की आवश्यकता है । Django 1.10 में मैं सिर्फ {{request.path}}टेम्पलेट में पहुंचता हूं और यह काम करता है। डिफ़ॉल्ट रूप django.core.context_processors.requestसे सेटिंग में पहले से ही कॉन्फ़िगर किया गया है यदि आपने उपयोग किया हैstartproject
उपयोगकर्ता

जवाबों:


232

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
थोड़ा लेकोनिक, और सही नहीं। यह है render_to_response, और नहीं render_to_request। और आप TEMPLATE_CONTEXT_PROCESSORSसेटिंग में नहीं कर सकते हैं जैसा कि आप सेटिंग्स में करते हैं, अन्य डिफ़ॉल्ट प्रोसेसर का उल्लेख किए बिना जो अच्छी तरह से टेम्पलेट्स में उपयोग किया जा सकता है!
RedGlyph

8
2016 तक, अब आपको view.py के लिए कुछ भी जोड़ने की आवश्यकता नहीं है। जब तक django.core.context_processors.request को TEMPLATE_CONTEXT_PROCESSORS में लोड किया जाता है - आपके पास टेम्पलेट से {{request.path}} तक पहुंच है।
राउटरिनेटर

8
request.pathजैसे क्वेरी पैरामीटर शामिल नहीं हैं ?foo=barrequest.get_full_pathइसके बजाय उपयोग करें ।
फ्लिम्स डे

@ राउटरिनेटर आपसे सहमत है। लेकिन यह जानकर अच्छा लगता है कि ऐसा करने के लिए उन मिडलवेयर को शामिल किया जाना चाहिए।
मार्शल एक्स

281

आप इस तरह से अपने टेम्पलेट में URL ला सकते हैं:

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

या द्वारा

{{ request.path }} यदि आपको अतिरिक्त मापदंडों की आवश्यकता नहीं है।

कुछ पूर्वधारणाओं और सुधारों को हाइपेट के और इगनसियो के उत्तरों में लाया जाना चाहिए , मैं अभी भविष्य के संदर्भ के लिए पूरे विचार को संक्षेप में प्रस्तुत करूँगा।

यदि आपको 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)
    )

4
मैंने एक विस्तारित सामान्य वर्ग दृश्य का उपयोग किया, और यह requestसंदर्भ में जोड़ना अनावश्यक था ।
बोबोर्ट

टीसीपी सूची की हार्ड कोडिंग से बचने के लिए निश्चित रूप से क्लीनर, लेकिन docs.djangoproject.com/en/dev/topics/settings/#default-settings कहते हैं:Note that a settings file should not import from global_settings, because that’s redundant
उपयोगकर्ता

3
return render(request, 'user/profile.html', {'title': 'User profile'})कम है
रिचर्ड डी विट

2
{{request.get_full_path|urlenode}}यदि आप पुनर्निर्देशित कर रहे हैं तो urlencode को शामिल करना याद रखें
उपयोगकर्ता

get_full_path से पैरामीटर कैसे प्राप्त करें ??
अंक num

7

नीचे दिया गया कोड मेरी मदद करता है:

 {{ request.build_absolute_uri }}

यह उपयोगी है, क्योंकि इसमें होस्टनाम / डोमेन भी शामिल है।
17

6

Django टेम्पलेट में
बस {{request.path}}
मापदंडों के साथ पूर्ण url प्राप्त करने के लिए वर्तमान url प्राप्त करें{{request.get_full_path}}

नोट : आपको requestdjango में जोड़ना होगाTEMPLATE_CONTEXT_PROCESSORS


5

मुझे लगता है कि टेम्पलेट पूर्ण अनुरोध के लिए भेजना थोड़ा बेमानी है। मैं इसे इस तरह से करता हूं

from django.shortcuts import render

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

##template
{{ app_url }}

4

अन्य उत्तर गलत थे, कम से कम मेरे मामले में। request.pathपूर्ण url प्रदान नहीं करता है, केवल सापेक्ष url, उदा /paper/53। मुझे कोई उचित समाधान नहीं मिला, इसलिए मैंने इसे संक्षिप्त करने से पहले व्यू में url के निरंतर भाग को हार्डकोड करना समाप्त कर दिया request.path


तारीख देखें। जवाब 6 या 7 साल पहले दिए गए थे।
०१:४२ पर

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, यह पहले से ही नहीं है।


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>

बस इतना ही, इसके अलावा कुछ और करने की जरूरत नहीं है, लॉगआउट के बाद, वे तुरंत उस पेज पर पुनर्निर्देशित कर देंगे, जिस पर वे लॉग इन हैं, वे फॉर्म भरेंगे और फिर उस पेज पर रीडायरेक्ट करेंगे जो वे चालू थे। भले ही वे गलत तरीके से इसमें लॉग इन करने की कोशिश करें फिर भी काम करता है।


3
अगर आपको यह एक url में है तो रास्ते को एनकोड करना चाहिए:{{ request.path|urlencode }}
Quentin

0

उपरोक्त उत्तर सही हैं और वे शानदार और संक्षिप्त उत्तर देते हैं।

मैं भी Django टेम्पलेट में वर्तमान पृष्ठ का url प्राप्त करना चाह रहा था क्योंकि मेरा इरादा सक्रिय करना था HOME page , MEMBERS page, CONTACT page, ALL POSTS pageवे अनुरोध कर रहे हैं जब।

मैं HTML कोड स्निपेट के उस भाग को चिपका रहा हूं जिसे आप नीचे देख सकते हैं कि इसका उपयोग क्या है request.path। आप इसे 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>


2
एक छोटा सा सुझाव - अगर आप सभी जाँच कर रहे हैं कि क्या activeकक्षा को प्रत्येक liतत्व में जोड़ना है , तो सिर्फ एक liतत्व के भीतर इनलाइन क्यों न करें : <li class="{% if "/contact/" == request.path %}active {% endif %}text-center">....</li>एक विशाल के बजाय अगर / अन्यथा पूरे के लिए ब्लॉक हो जाए li? यह बेमानी कोड का एक पूरा गुच्छा बचा लेगा :)
tatlar

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.