জ্যাঙ্গো ইউআরএল পুনর্নির্দেশ


104

আমার অন্য কোনও URL এর সাথে মেলে না এমন ট্র্যাফিক আমি কীভাবে হোম পৃষ্ঠায় ফিরে যেতে পারি?

urls.py:

urlpatterns = patterns('',
    url(r'^$', 'macmonster.views.home'),
    #url(r'^macmon_home$', 'macmonster.views.home'),
    url(r'^macmon_output/$', 'macmonster.views.output'),
    url(r'^macmon_about/$', 'macmonster.views.about'),
    url(r'^.*$',  'macmonster.views.home'),
)

যেমনটি দাঁড়িয়েছে, শেষ এন্ট্রিটি হোম "পৃষ্ঠাতে সমস্ত" অন্যান্য "ট্র্যাফিক প্রেরণ করে তবে আমি কোনও HTTP 301 বা 302 এর মাধ্যমে পুনর্নির্দেশ করতে চাই ।

উত্তর:


183

আপনি ক্লাস ভিত্তিক ভিউ কল করতে পারেন RedirectView

from django.views.generic.base import RedirectView

urlpatterns = patterns('',
    url(r'^$', 'macmonster.views.home'),
    #url(r'^macmon_home$', 'macmonster.views.home'),
    url(r'^macmon_output/$', 'macmonster.views.output'),
    url(r'^macmon_about/$', 'macmonster.views.about'),
    url(r'^.*$', RedirectView.as_view(url='<url_to_home_view>', permanent=False), name='index')
)

লক্ষ্য করুন কিভাবে যেমন urlমধ্যে <url_to_home_view>আপনি আসলে URL নির্দিষ্ট করতে হবে।

permanent=FalseHTTP 302 প্রদান permanent=Trueকরবে , এবং HTTP 301 প্রদান করবে।

বিকল্পভাবে আপনি ব্যবহার করতে পারেন django.shortcuts.redirect

জ্যাঙ্গো 2+ সংস্করণের জন্য আপডেট

জ্যাঙ্গো 2+ সহ, url()অবচিত ও পরিবর্তিত হয় re_path()। ব্যবহার url()নিয়মিত প্রকাশের সাথে হুবহু একই । নিয়মিত প্রকাশের প্রয়োজন ছাড়াই প্রতিস্থাপনের জন্য, ব্যবহার করুন path()

from django.urls import re_path

re_path(r'^.*$', RedirectView.as_view(url='<url_to_home_view>', permanent=False), name='index')

আমি এটি যুক্ত করেছি তবে এইচটিটিপি 500 ত্রুটি পেয়েছে? URL (দ '^ * $।', RedirectView.as_view (URL = 'macmon_about', স্থায়ী = মিথ্যা)
felix001

4
মনে হচ্ছে আপনি একটি ")" অনুপস্থিত রয়েছেন, পাশের শেষ দিকে স্ক্রোল করুন এবং আপনি এটি দেখতে পাবেন। আপনি nameযদিও অংশটি বাদ দিতে পারেন
dmg

4
@ felix001 বিটিডব্লিউ, এইচটিটিপি 500 সাধারণত (সময়ের 99% হিসাবে) এর অর্থ আপনার একটি সিনট্যাক্স ত্রুটি রয়েছে, এটি একবার দেখুন - ডকস.ডজ্যাঙ্গোপ্রজেক্ট / en / দেবদূত / হোয়াটো / ইরর - রিপোর্টিং / । যখন কোনও সাইটের বিকাশ চলছে তখন সর্বদা বিকল্পটি রাখা DEBUG = Trueবা কমপক্ষে সেট করা ভাল ADMINS- ডকস.ডজঙ্গোপ্রজেক্ট
en

পুনঃনির্দেশ url তৈরি করতে আমি কীভাবে স্লগ পাস এবং সেই ক্ষেত্রটি ব্যবহার করব। EXA: url (r '^ (? P <slug> [a-zA-Z0-9 -] +) /', RedirectView.as_view (url = 'http: //'+slug+'.mywebsite.com', স্থায়ী = মিথ্যা),)
রোশান

নোট করুন যে এই পদ্ধতিটি ব্যবহার করে ব্যবহারকারীকে পুনর্নির্দেশের লুপে আটকানো সত্যই সহজ।
স্মাইলবম্ব

36

জ্যাঙ্গো 1.8-তে, আমি এভাবেই আমার কাজ করেছি।

from django.views.generic.base import RedirectView

url(r'^$', views.comingSoon, name='homepage'),
# whatever urls you might have in here
# make sure the 'catch-all' url is placed last
url(r'^.*$', RedirectView.as_view(pattern_name='homepage', permanent=False))

ব্যবহারের পরিবর্তে url, আপনি pattern_nameএটিটি ব্যবহার করতে পারেন যা কিছুটা আন-ডিআরওয়াই এবং আপনার ইউআরএল পরিবর্তন করার বিষয়টি নিশ্চিত করবে, আপনাকেও পুনর্নির্দেশটি পরিবর্তন করতে হবে না।


11

যদি আপনি জাজানো 1.2 তে আটকে থাকেন তবে আমি যেমন থাকি এবং রেডাইরেক্টভিউয়ের অস্তিত্ব না থাকে তবে পুনঃনির্দেশ ম্যাপিং যুক্ত করার জন্য অন্য রুটকেন্দ্রিক উপায়টি হ'ল:

(r'^match_rules/$', 'django.views.generic.simple.redirect_to', {'url': '/new_url'}),  

আপনি একটি ম্যাচে সমস্ত কিছু পুনরায় রুট করতে পারেন। কোনও অ্যাপ্লিকেশনটির ফোল্ডার পরিবর্তন করার সময় কিন্তু বুকমার্কগুলি সংরক্ষণ করতে চাইলে এটি দরকারী:

(r'^match_folder/(?P<path>.*)', 'django.views.generic.simple.redirect_to', {'url': '/new_folder/%(path)s'}),  

আপনি যদি কেবলমাত্র আপনার ইউআরএল রাউটিংটি পরিবর্তন করার চেষ্টা করছেন এবং .htaccess ইত্যাদিতে অ্যাক্সেস না পেয়ে থাকেন তবে এটি django.shortcuts.redirect এর চেয়ে ভাল ( .htaccess)।


4
এই পুরানো ফর্ম্যাটটি জাঙ্গোর নতুন সংস্করণগুলিতে অবচয় বা সরিয়ে ফেলা হয়েছে, তবে আপনি গ্রহণযোগ্য উত্তরে বর্ণিত রেডিরেক্টভিউ ব্যবহার করে পুনর্নির্দেশের সময় ইউআরএল কীওয়ার্ডগুলি ব্যবহার করতে পারেন। উদাহরণ:(r'^match_folder/(?P<path>.*)/$', RedirectView.as_view(url='/new_folder/%(path)s/', permanent=True), name='view-name'),
মাইকা ওয়াল্টার

10

অন্যান্য পদ্ধতিগুলি দুর্দান্ত কাজ করে তবে আপনি ভাল পুরানোটিও ব্যবহার করতে পারেন django.shortcut.redirect

নীচের কোডটি এই উত্তর থেকে নেওয়া হয়েছিল ।

জ্যাঙ্গো ২.x এ:

from django.shortcuts import redirect
from django.urls import path, include

urlpatterns = [
    # this example uses named URL 'hola-home' from app named hola
    # for more redirect's usage options: https://docs.djangoproject.com/en/2.1/topics/http/shortcuts/
    path('', lambda request: redirect('hola/', permanent=True)),
    path('hola/', include('hola.urls')),
]

9

এটি করার আর একটি উপায় হ'ল এইচটিটিপিআরস্পোনস পারমানেন্টের পুনঃনির্দেশ যেমন ব্যবহার করা হচ্ছে:

ভিউ.পি-তে

def url_redirect(request):
    return HttpResponsePermanentRedirect("/new_url/")

Url.py এ py

url(r'^old_url/$', "website.views.url_redirect", name="url-redirect"),
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.