سؤال

لقد استخدمت نماذج معدة مسبقًا لتسجيل Django ولاحظت أن Django يفهم تلك الصفحات user وأنا أفعل أشياء مثل user.is_authenticated و user.username.

حاولت النظر إلى views.py رمز في كل من تسجيل جانغو و django.contrib.auth.views, ، لكنني لم أتمكن من معرفة كيف يرسل هذان الشخصان دائمًا الرسالة user المعلومات إلى القوالب.

يمكنني دائمًا إرسال صراحةً user معلومات السياق لكل عرض، ولكن هذا من شأنه أن ينتهك مبدأ DRY.

حاولت استخدام هذا الحل, ، ولكن أحصل على خطأ قائلا

Put 'django.contrib.auth.context_processors.auth' in your TEMPLATE_CONTEXT_PROCESSORS setting in order to use the admin application.

وحتى لو وضعت المسار أعلاه بالداخل settings.py مثله

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'doors.processor_file_name.user',
)

قوالبي لا تزال لا تعرف عنها user.

هل كانت مفيدة؟

المحلول

اتضح أنه في كل مرة كنت أستخدمها render_to_response في views.py...

def order_all( request ) :
    orders = Order.objects.all()
    return render_to_response( 'doors/order/list.html', { 'orders' : orders } )

ال القاموس ليس أ RequestContext.باستخدام أ RequestContext سوف تشمل تلقائيا TEMPLATE_CONTEXT_PROCESSORS, ، والتي في حالتي سوف تشمل django.contrib.auth.context_processors.auth, ، والتي سوف تمر على طول user المعلومات إلى كل قالب.

وبعبارة أخرى، أنا فقط بحاجة إلى تغيير الكود أعلاه إلى هذا

def order_all( request ) :
    orders = Order.objects.all()
    return render_to_response( 'doors/order/list.html', context_instance = RequestContext( request, { 'orders' : orders } ) )

لا تنسى الاستيراد RequestContext أيضاً

from django.template import RequestContext

وتبين أيضًا أنني لست بحاجة إلى التضمين بشكل صريح django.contrib.auth.context_processors.auth (أو أكتب عادتي doors.processor_file_name.user) في ال TEMPLATE_CONTEXT_PROCESSORS لأن django.contrib.auth.context_processors.auth يتم تضمينه بشكل افتراضي

نصائح أخرى

أدرك أن هذا سؤال قديم، ولكن بالنسبة لأي شخص آخر يواجه هذه المشكلة، يمكنك استخدام "render" بدلاً من "render_to_response":

def order_all(request):
    orders = Order.objects.all()
    return render(request, 'doors/order/list.html', { 'orders': order })

وهذا أيضًا يلغي الحاجة إلى استيراد RequestContext.بحسب ال مستندات جانغو, ، "render" هو نفس "render_to_response"، ولكن يحتوي على وسيطة مثيل السياق التي تفرض استخدام RequestContext.

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