Django و urls.py: كيف يمكنني httpresponseredirect عبر عنوان URL المسمى؟
-
05-07-2019 - |
سؤال
أنا أكتب تطبيق ويب قائم على الأعضاء ، وأحتاج إلى أن أكون قادرًا على إعادة توجيه الصفحة بعد تسجيل الدخول. أرغب في استخدام عنوان URL المسمى من برنامج urls.py الخاص بي في ملف Views.py لتطبيق تسجيل الدخول ، لكن لا يمكنني معرفة ما يجب القيام به. ما لدي هذا:
def login(request):
if request.session.has_key('user'):
if request.session['user'] is not None:
return HttpResponseRedirect('/path/to/page.html')
ما أريد إنجازه هو شيء مثل:
def login(request):
if request.session.has_key('user'):
if request.session['user'] is not None:
return HttpResponseRedirect url pageName
أحصل على أخطاء بناء الجملة عندما أقوم بتنفيذ هذا ، أي أفكار؟
المحلول
تحتاج إلى استخدام reverse()
وظيفة utils.
from django.urls import reverse
# or Django < 2.0 : from django.core.urlresolvers import reverse
def myview(request):
return HttpResponseRedirect(reverse('arch-summary', args=[1945]))
أين args
يرضي جميع الحجج في تعبير عنوان URL الخاص بك. يمكنك أيضًا تزويد ARGS باسم تمرير قاموس.
نصائح أخرى
الجواب الصحيح من Django 1.3 فصاعدا, ، حيث تقوم طريقة إعادة التوجيه ضمنيًا بإجراء مكالمة عكسية ، هي:
from django.shortcuts import redirect
def login(request):
if request.session.get('user'):
return redirect('named_url')
طريقة أكثر إيجازًا لكتابة ذلك إذا كان البيان سيكون if request.session.get('user')
. يتم إهمال HAS_KEY في الوقت الحاضر ، ويعيد .get () أي شيء (افتراضيًا ، قابل للتغيير عن طريق تمرير معلمة ثانية). لذا الجمع بين هذا مع رد Soviut:
from django.core.urlresolvers import reverse
def login(request):
if request.session.get('user'):
return HttpResponseRedirect(reverse('my-named-url'))
from django.core.urlresolvers import reverse
from django.shortcuts import redirect
def login(request):
if request.session.get('user'):
return redirect(reverse('name-of-url'))
انظر أيضا https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse-resolution-of-urls