পাইথন + জ্যাঙ্গো পৃষ্ঠা পুনর্নির্দেশ


158

cflocationজাজানোতে আমি কীভাবে একটি সাধারণ পুনর্নির্দেশ (যেমন কোল্ডফিউজেনে, বা header(location:http://)পিএইচপি জন্য) সম্পাদন করব ?

উত্তর:


250

ইহা সহজ:

from django.http import HttpResponseRedirect

def myview(request):
    ...
    return HttpResponseRedirect("/path/")

অফিসিয়াল জ্যাঙ্গো ডক্সে আরও তথ্য

আপডেট: জাজানো 1.0

দৃশ্যত জ্যাঙ্গোতে এখন এটি করার আরও ভাল উপায় রয়েছে generic views

উদাহরণ -

from django.views.generic.simple import redirect_to

urlpatterns = patterns('',   
    (r'^one/$', redirect_to, {'url': '/another/'}),

    #etc...
)

সেখানে বেশি জেনেরিক মতামত ডকুমেন্টেশন । ক্রেডিট - কার্লস ব্যারোবস

আপডেট # 2: জাজানো 1.3+

জ্যাঙ্গো 1.5 তে পুনর্নির্দেশ_এর আর অস্তিত্ব নেই এবং রেডিরেক্টভিউ দ্বারা প্রতিস্থাপন করা হয়েছে । যোনাতনকে কৃতিত্ব

from django.views.generic import RedirectView

urlpatterns = patterns('',
    (r'^one/$', RedirectView.as_view(url='/another/')),
)

8
এটি আর জ্যাঙ্গো 1.0 হিসাবে সেরা পদ্ধতি নয়। এই উত্তরটি দেখুন: stackoverflow.com/questions/523356/python-django-page-redirect/…
জ্যাক

2
redirectথেকে ব্যবহার করছেন না কেন django.shortcuts?
আফশিন মেহরাবানি

4
আমি ব্যবহার করি('^pattern/$', lambda x: redirect('/redirect/url/'))
মির্মাগুয়ে

5
এটি ইতিমধ্যে জ্যাঙ্গো 1.5 থেকে শুরু করে অবচয় করা হয়েছে। প্রদর্শন করো 'এ RedirectView' পরিবর্তে: docs.djangoproject.com/en/1.5/ref/class-based-views/base/...
Yonatan

এটি আসলে অবচয় নয়, আপনি কী বলছেন তা হ্রাস করা হয়েছে? পুনঃনির্দেশ? এই পদ্ধতিটি ব্যবহার করে আমি প্যারামিটারগুলির মান ল্যাম্বডায় কীভাবে পাস করতে জানি না, অর্থাত্ url (r '^ (? P <location_id> \ d +) / $', ল্যাম্বডা এক্স: এইচটিপিআরএসপোনসেডাইরেক্ট (বিপরীত ('ডেইলিরেটপোর্ট_লোকেশন', আরগস =) ['% (
অবস্থান_আইডি

113

আপনি কী চান তার উপর নির্ভর করে (যেমন আপনি কোনও অতিরিক্ত প্রাক প্রক্রিয়াজাতকরণ করতে না চান), কেবল জাঙ্গোর redirect_toজেনেরিক দৃষ্টিভঙ্গিটি ব্যবহার করা সহজ :

from django.views.generic.simple import redirect_to

urlpatterns = patterns('',
    (r'^one/$', redirect_to, {'url': '/another/'}),

    #etc...
)

আরও উন্নত উদাহরণগুলির জন্য ডকুমেন্টেশন দেখুন ।


জাজানো 1.3+ ব্যবহারের জন্য:

from django.views.generic import RedirectView

urlpatterns = patterns('',
    (r'^one/$', RedirectView.as_view(url='/another/')),
)

(বর্তমান) শীর্ষে ভোট দেওয়া উত্তরের মত আপনার নিজের প্রয়োগ (যতই সহজ সরল হোক না) বাস্তবায়নের চেয়ে জেনেরিক ভিউ ব্যবহারের জন্য +1।
দিন

আপনি অতিরিক্ত প্রাক-প্রসেসিং করতে চান তবে কারও কাছে কি উদাহরণ রয়েছে ?
eageranalyst

1
তারপরে আমি প্রস্তাবিত হচ্ছি যে কোনও কাস্টম ভিউ লিখুন যা প্রক্রিয়াকরণটি করে এবং তারপরে জেনেরিক ভিউ কল করে, বা একটি সজ্জা লিখুন যেমন প্রাক_প্রসেস এবং জেনেরিক ভিউ সাজাইয়া: (আর '^ এক / $', প্রাক_প্রসেস (পুনর্নির্দেশ_), ur 'url ':' / অন্য / '})
কার্লস ব্যারোবস

1
@ নিলসকো: আপনি যদি অতিরিক্ত প্রসেসিং করতে চান তবে কেন্নু বর্ণিত পুনর্নির্দেশ শর্টকাটটি এখানে
লাই রাইয়ান

1
জাঙ্গো ১.৪-এ, redirect_to এ আমদানি করাকে ছাড়ার সতর্কতা দেয়।
জেটি

38

বাস্তবে এমন কোনো প্রতিটি পুনর্নির্দেশ জন্য একটি দৃশ্য থাকার চেয়ে সহজ উপায় আছে - আপনি এটা করতে পারেন সরাসরি মধ্যে urls.py:

from django.http import HttpResponsePermanentRedirect

urlpatterns = patterns(
    '',
    # ...normal patterns here...
    (r'^bad-old-link\.php',
     lambda request: HttpResponsePermanentRedirect('/nice-link')),
)

একটি লক্ষ্য কলযোগ্য পাশাপাশি স্ট্রিংও হতে পারে যা আমি এখানে ব্যবহার করছি।


2
সত্য, তবে redirect_toজ্যাঙ্গোর সাথে আসা জেনেরিক ভিউটি ব্যবহার করা সহজতর এবং আরও পঠনযোগ্য। কার্লস উত্তর stackoverflow.com/questions/523356/python-django-page-redirect/… দেখুন
দিন

28

জ্যাঙ্গো ১.১ থেকে আপনি সরল পুনর্নির্দেশ শর্টকাটটিও ব্যবহার করতে পারেন :

from django.shortcuts import redirect

def myview(request):
    return redirect('/path')

এটি একটি alচ্ছিক স্থায়ী = সত্য কীওয়ার্ড আর্গুমেন্টও গ্রহণ করে।


14

আপনি যদি একটি সম্পূর্ণ সাব-ফোল্ডার পুনর্নির্দেশ করতে চান, তবে রিডাইরেক্টভিউতে urlযুক্তিটি আসলে ইন্টারপোল্টেড , সুতরাং আপনি এর মতো কিছু করতে পারেন urls.py:

from django.conf.urls.defaults import url
from django.views.generic import RedirectView

urlpatterns = [
    url(r'^old/(?P<path>.*)$', RedirectView.as_view(url='/new_path/%(path)s')),
]

?P<path>আপনি ক্যাপচার মধ্যে প্রতিপালিত হবে RedirectView। এই ক্যাপচারেড ভেরিয়েবলটি urlআপনার দেওয়া যুক্তির পরিবর্তে প্রতিস্থাপন করা হবে , /new_path/yay/mypathআপনার আসল পথটি যদি আমাদের দেওয়া হত giving/old/yay/mypath

আপনি ….as_view(url='…', query_string=True)যদি কোয়েরি স্ট্রিংটি অনুলিপি করতে চান তবে আপনিও করতে পারেন ।


10

জাজানো সংস্করণ ১.৩ সহ ক্লাস ভিত্তিক পদ্ধতিটি হ'ল:

from django.conf.urls.defaults import patterns, url
from django.views.generic import RedirectView

urlpatterns = patterns('',
    url(r'^some-url/$', RedirectView.as_view(url='/redirect-url/'), name='some_redirect'),
)

এই উদাহরণটি url.py এ থাকে


6

সতর্ক থাকুন। আমি এটি ডেভলপমেন্ট সার্ভারে করেছি এবং পরে এটি পরিবর্তন করতে চেয়েছিলাম।

এটি পরিবর্তন করার জন্য আমাকে আমার ক্যাশেগুলি সাফ করতে হয়েছিল। ভবিষ্যতে এই মাথা চুলকানো এড়ানোর জন্য, আমি এটিকে এভাবে অস্থায়ী করতে সক্ষম হয়েছি:

from django.views.generic import RedirectView

url(r'^source$', RedirectView.as_view(permanent=False, 
                                      url='/dest/')),

1

আপনি প্রশাসন বিভাগে এটি করতে পারেন। এটি ডকুমেন্টেশনে ব্যাখ্যা করা হয়েছে।

https://docs.djangoproject.com/en/dev/ref/contrib/redirects/


যদিও আমার প্রশ্নের পক্ষে যথেষ্ট প্রাসঙ্গিক নয়, তথাপি এটি এখনও একটি আকর্ষণীয় তথ্য।
কাইল হেইস

1

পৃষ্ঠা_পথ = urls.py এ সংজ্ঞায়িত করুন

def deletePolls(request):
    pollId = deletePool(request.GET['id'])
    return HttpResponseRedirect("/page_path/")

0

এটি জাঙ্গোর বেশিরভাগ সংস্করণে কাজ করা উচিত, আমি এটি 1.6.5 এ ব্যবহার করছি:

from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
urlpatterns = patterns('',
    ....
    url(r'^(?P<location_id>\d+)/$', lambda x, location_id: HttpResponseRedirect(reverse('dailyreport_location', args=[location_id])), name='location_stats_redirect'),
    ....
)

আপনি এখনও এই সমাধানটির সাথে একটি হার্ড কোডড ইউআরএলের পরিবর্তে url প্যাটার্নটির নাম ব্যবহার করতে পারেন। ইউআরএল থেকে অবস্থান_আইডি প্যারামিটারটি ল্যাম্বদা ফাংশনে নিচে চলে গেছে।

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