বর্তমান উত্তর ব্যাখ্যা এ একটি মহান কাজ করেছেন কি এইreverse()
ফাংশনটি ।
যাইহোক, আমি আশা করেছি যে আমার উত্তরটি কেন অন্যরকম আলো ছড়িয়ে দিয়েছে : কেন reverse()
আরও সরল, যুক্তিযুক্তভাবে আরও বেশি পাইথোনিক পদ্ধতির পরিবর্তে টেমপ্লেট-ভিউ বাইন্ডিংয়ে ব্যবহার করুন এবং এই জনপ্রিয়তার জন্য কিছু বৈধ কারণ কী তা "এর মাধ্যমে পুনঃনির্দেশ করুন " reverse()
জ্যাঙ্গো রাউটিং যুক্তিতে প্যাটার্ন "।
একটি মূল সুবিধা হ'ল ইউআরএলটির বিপরীত নির্মাণ, যেমন অন্যরা উল্লেখ করেছেন। ঠিক কীভাবে আপনি {% url "profile" profile.id %}
আপনার অ্যাপ্লিকেশনটির ইউআরএল কনফিগারেশন ফাইল থেকে ইউআরএল তৈরি করতে ব্যবহার করবেন: যেমনpath('<int:profile.id>/profile', views.profile, name="profile")
।
তবে ওপি যেমন উল্লেখ করেছে, এর ব্যবহারের reverse()
সাথে সাধারণভাবে ব্যবহারও মিলিত হয় HttpResponseRedirect
। কিন্তু কেন?
এটি কী তা আমি পুরোপুরি নিশ্চিত নই তবে এটি HTTPResponseRedirect এর সাথে একসাথে ব্যবহৃত হয়। এই বিপরীতটি (কখন) ব্যবহার করার কথা?
নিম্নলিখিত বিবেচনা করুন views.py
:
from django.http import HttpResponseRedirect
from django.urls import reverse
def vote(request, question_id):
question = get_object_or_404(Question, pk=question_id)
try:
selected = question.choice_set.get(pk=request.POST['choice'])
except KeyError:
# handle exception
pass
else:
selected.votes += 1
selected.save()
return HttpResponseRedirect(reverse('polls:polls-results',
args=(question.id)
))
এবং আমাদের ন্যূনতম urls.py
:
from django.urls import path
from . import views
app_name = 'polls'
urlpatterns = [
path('<int:question_id>/results/', views.results, name='polls-results'),
path('<int:question_id>/vote/', views.vote, name='polls-vote')
]
ইন vote()
ফাংশন, আমাদের কোড else
ব্লক ব্যবহার reverse
সহ HttpResponseRedirect
নিম্নলিখিত প্যাটার্ন:
HttpResponseRedirect(reverse('polls:polls-results',
args=(question.id)
এটি প্রথম এবং সর্বাগ্রে, এর অর্থ হ'ল আমাদের ইউআরএলকে হার্ডকোড করতে হবে না (ডিআরওয়াই নীতির সাথে সামঞ্জস্যপূর্ণ) তবে আরও গুরুত্বপূর্ণভাবে, reverse()
যুক্তিগুলি থেকে args=(question.id)
প্যাকযুক্ত মানগুলি হ্যান্ডেল করে ইউআরএল স্ট্রিংগুলি তৈরি করার একটি দুর্দান্ত উপায় সরবরাহ করে ( ইউআরএল কনফিগ দ্বারা পরিচালিত)। মনে করা question
হয়েছে এমন একটি বৈশিষ্ট্য id
রয়েছে যার মধ্যে মান রয়েছে 5
, এর পরে নির্মিত ইউআরএলটি হ'ল reverse()
:
'/polls/5/results/'
সাধারণ টেমপ্লেট-ভিউ বাইন্ডিং কোডটিতে আমরা ব্যবহার করি HttpResponse()
বা render()
তারা সাধারণত কম বিমূর্ততা জড়িত: একটি দৃশ্য ফাংশন একটি টেমপ্লেট ফিরে:
def index(request):
return render(request, 'polls/index.html')
তবে পুনঃনির্দেশের অনেক বৈধ ক্ষেত্রে আমরা সাধারণত প্যারামিটারগুলির তালিকা থেকে URL তৈরির বিষয়ে যত্নশীল। এর মধ্যে যেমন রয়েছে:
POST
অনুরোধের মাধ্যমে এইচটিএমএল ফর্ম জমা দেওয়া
- ব্যবহারকারী লগইন পোস্ট-বৈধতা
- JSON ওয়েব টোকেনের মাধ্যমে পাসওয়ার্ড পুনরায় সেট করুন
এগুলির মধ্যে বেশিরভাগটি পুনঃনির্দেশের কিছু ফর্ম এবং প্যারামিটারগুলির একটি সেট দিয়ে নির্মিত URL টি জড়িত। আশা করি এটি উত্তরগুলির ইতিমধ্যে সহায়ক থ্রেডে যুক্ত হবে!
url--> view name
,। তবে কখনও কখনও, পুনর্নির্দেশের মতো, আপনাকে বিপরীত দিকে যেতে হবে এবং জ্যাঙ্গোকে একটি দর্শনের নাম দেওয়া দরকার এবং জাজানো উপযুক্ত ইউআরএল তৈরি করে। অন্য কথায়view name --> url
,। এটি,reverse()
(এটি ইউআরএল ফাংশনের বিপরীত)। এটি কেবল কল করার জন্য এটি আরও স্বচ্ছ বলে মনে হতে পারেgenerateUrlFromViewName
তবে এটি খুব দীর্ঘ এবং সম্ভবত যথেষ্ট সাধারণ নয়: ডকস.ডজ্যাঙ্গোপ্রজেক্ট