Django و urls.py: كيف يمكنني httpresponseredirect عبر عنوان URL المسمى؟

StackOverflow https://stackoverflow.com/questions/1208802

سؤال

أنا أكتب تطبيق ويب قائم على الأعضاء ، وأحتاج إلى أن أكون قادرًا على إعادة توجيه الصفحة بعد تسجيل الدخول. أرغب في استخدام عنوان 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top