জ্যাঙ্গো টেমপ্লেটের মধ্যে কীভাবে বর্তমান ইউআরএল পাবেন?


309

আমি ভাবছিলাম কীভাবে কোনও টেমপ্লেটের মধ্যে বর্তমান ইউআরএল পাবেন।

আমার বর্তমান ইউআরএলটি বলুন:

.../user/profile/

আমি কীভাবে এটি টেমপ্লেটে ফিরিয়ে দেব?



2
নীচের সমস্ত উত্তর আমাকে মনে করেছিল যে requestকোনও টেমপ্লেটে অ্যাক্সেস পেতে আমার কিছু জিমন্যাস্টিক করা উচিত । জ্যাঙ্গো 1.10 এ আমি কেবল {{request.path}}টেমপ্লেটে অ্যাক্সেস করেছি এবং এটি কাজ করে। ডিফল্টরূপে django.core.context_processors.requestইতিমধ্যে startproject
ব্যবহারকারী

উত্তর:


232

জ্যাঙ্গো ১.৯ এবং তার বেশি:

## 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_requestTEMPLATE_CONTEXT_PROCESSORSটেমপ্লেটগুলিতে ভালভাবে ব্যবহার করা যেতে পারে এমন অন্যান্য ডিফল্ট প্রসেসরের উল্লেখ না করে আপনি সেটিংস.পি-তে যেমন করছেন তেমন সংজ্ঞা দিতে পারবেন না !
রেডগ্লাইফ

8
২০১ of সালের হিসাবে, আপনাকে আর ভিউ.পাইতে কিছু যুক্ত করার দরকার নেই। যতক্ষণ না django.core.context_processors.request TEMPLATE_CONTEXT_PROCESSORS এ লোড করা থাকে - আপনি টেমপ্লেট থেকে {{request.path} to অ্যাক্সেস করতে পারেন।
রুথিনেটর

8
request.pathকোয়েরির মতো প্যারামিটারগুলি অন্তর্ভুক্ত করে না ?foo=barrequest.get_full_pathপরিবর্তে ব্যবহার করুন।
ফ্লিমটি

@ রথিনেটর আপনার সাথে একমত তবে এটি জেনে ভালো লাগল যে এটি ঘটানোর জন্য সেই মিডলওয়্যারগুলিকে অন্তর্ভুক্ত করা দরকার।
মার্শাল এক্স

281

আপনি আপনার টেম্পলেটটিতে ইউআরএল আনতে পারেন:

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

অথবা দ্বারা

{{ request.path }} আপনার যদি অতিরিক্ত পরামিতিগুলির প্রয়োজন না হয়।

কিছু স্পষ্টতা এবং সংশোধন হাইপেট এবং ইগানসিও'তে আনা উচিত , আমি ভবিষ্যতের রেফারেন্সের জন্য এখানে পুরো ধারণাটি সংক্ষেপে করব।

requestটেমপ্লেটে আপনার যদি ভেরিয়েবলের প্রয়োজন হয় তবে আপনাকে অবশ্যই 'django.core.context_processors.request' যুক্ত করতে হবেTEMPLATE_CONTEXT_PROCESSORS সেটিংসে হবে, এটি ডিফল্টরূপে নয় (জাজানো 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প্রসঙ্গে যুক্ত করা অপ্রয়োজনীয় ছিল ।
ববোর্ট

অবশ্যই টিসিপি তালিকার কোডিং কঠোরতা এড়ানোর জন্য অবশ্যই ক্লিনার, তবে ডকস.ডজ্যাঙ্গোপ্রজেক্ট / এএন / দেব / টপিকস / সেটিং /# ডিফল্ট- সেটিং বলেছেন: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}}যদি আপনি পুনর্নির্দেশ করছেন
ব্যবহারকারী

get_ful_path থেকে প্যারামিটারগুলি কীভাবে পাবেন?
সংখ্যা

7

নীচের কোডটি আমাকে সহায়তা করে:

 {{ request.build_absolute_uri }}

এটি দরকারী, কারণ এতে হোস্টনাম / ডোমেনও অন্তর্ভুক্ত রয়েছে।
waverider

6

জ্যাঙ্গো টেমপ্লেটে প্যারামিটারগুলির সাথে পূর্ণ url পাওয়ার জন্য
কেবলমাত্র বর্তমান ইউআরএল পান{{request.path}}
{{request.get_full_path}}

দ্রষ্টব্য : আপনাকে অবশ্যই requestজ্যাঙ্গোতে যুক্ত করতে হবে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 সরবরাহ করে না, কেবল সম্পর্কিত ইউআরএল, যেমন /paper/53। আমি কোনো সঠিক সমাধান খুঁজে পাইনি, তাই আমি সঙ্গে এটি concatenating সামনে দেখুন URL টির ধ্রুবক অংশ hardcoding শেষ পর্যন্ত request.path


তারিখ দেখুন। উত্তরগুলি 6 বা 7 বছর আগে দেওয়া হয়েছিল।
বিন্দু

3

উভয়ই {{ request.path }} and {{ request.get_full_path }}বর্তমান ইউআরএল ফিরিয়ে দেয় তবে সম্পূর্ণ ইউআরএল নয়, উদাহরণস্বরূপ:

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

এটি একটি পুরানো প্রশ্ন তবে আপনি জ্যাঙ্গো-রেজিস্ট্রেশন ব্যবহার করলে এটি যত সহজেই সংক্ষিপ্ত হতে পারে med

আপনার লগ ইন এবং লগ আউট লিঙ্কে (আপনার পৃষ্ঠার শিরোনামটিতে বলা যাক) লিঙ্কটিতে পরবর্তী প্যারামিটার যুক্ত করুন যা লগইন বা লগআউটে যাবে। আপনার লিঙ্কটি দেখতে এমন হওয়া উচিত।

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

এটি কেবলমাত্র, আর কিছুই করার দরকার নেই, লগআউট করার পরে তারা তত্ক্ষণাত্ তাদের যে পৃষ্ঠাতে রয়েছে তার পৃষ্ঠায় পুনঃনির্দেশ করা হবে, লগ ইন করার জন্য, তারা ফর্মটি পূরণ করবে এবং এটি তারপরে যে পৃষ্ঠায় ছিল তা পুনর্নির্দেশ করবে will এমনকি যদি তারা ভুলভাবে এটিতে লগ ইন করার চেষ্টা করে তবে এখনও কাজ করে।


3
কোনও url এ থাকলে আপনার পথটি এনকোড করা উচিত:{{ request.path|urlencode }}
কোয়ান্টিন

0

উপরের উত্তরগুলি সঠিক এবং তারা দুর্দান্ত এবং সংক্ষিপ্ত উত্তর দেয়।

আমিও জ্যাঙ্গো টেমপ্লেটে বর্তমান পৃষ্ঠার URL পেয়ে খুঁজছেন ছিল আমার উদ্দেশ্য সক্রিয় ছিল HOME page, MEMBERS page, CONTACT page, ALL POSTS pageতারা অনুরোধ করা হয় যখন।

আপনি এইচটিএমএল কোড স্নিপেটের অংশটি আটকালেন যা আপনি নীচের ব্যবহারটি দেখতে বুঝতে পারেন 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? এটি রিডানড্যান্ট কোডের পুরো
গোছাটি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.