لماذا على وجه الأرض لا بد لي من أن يمر RequestContext في كل إجاباتي؟

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

سؤال

وأريد أن أسلط الضوء على الصفحة الحالية في قائمة التنقل. من الواضح أنني بحاجة إلى إعطاء الروابط القائمة فئة مثل "نشطة" عندما كنت على الصفحة الخاصة بهم. هذه هي المشكلة الكلاسيكية ورأيت العديد من الحلول المقترحة. مشكلتي هي أنني أكره كل منهم، والنظر أيا منها إلى أن تكون جافة جدا. على سبيل المثال:

@register.simple_tag
def active(request, pattern):
    import re
    if re.search(pattern, request.path):
        return 'active'
    return ''

----

{% load tags %}
<div id="navigation">
    <a class="{% active request "^/about/" %}" href="/about/">About</a>
    <a class="{% active request "^/contact/" %}" href="/contact/">Contact</a>
    <a class="{% active request "^/services/" %}" href="/services/">Services</a>
</div>

العلامة يأخذ الطلب الحالي والتعبير رابط والعوائد "نشطة" إذا كنت حاليا على هذه الصفحة. بدلا من ذلك يمكن القيام بذلك مع إطلالة اسمه بدلا من عناوين المواقع ولكن المبدأ هو نفسه.

وبلدي المسألة الرئيسية مع ذلك هو أن بلدي الملاحة وسوف يطلق على 99٪ من وجهات نظري وبعد، من أجل الحصول على طلب المتغير الحالي لا يزال لدي تحليل لRequestContext إلى القالب مع شيء من هذا القبيل:

def contact(request):
    # snip ...
    return render_to_response(
                'contact.html',
                { 'myvar' : myvar },
                context_instance=RequestContext(request))

لماذا أحتاج لإضافة هذا الخط context_instance إلى كل واحد من وجهة نظري عندما الارجح لكن كل واحد منهم <م> تحتاج المتغير طلب من أجل الحصول على عنوان الموقع الحالي / بهدف تسليط الضوء على نشط حلقة الوصل؟ هذا يبدو بفظاعة الرطب، وخاصة بالنسبة للميزة التي يجب أن تكون في الغالبية العظمى من المواقع جانغو. أريد طلب ليتم تضمينها بشكل افتراضي وتكون قادرة على اختياريا قمعه. أنا لا يمكن العثور على طريقة للقيام بذلك في الوسيطة كما لا يمكن اعتراض القالب قبل في المقدمة بعد أن عاد مشاهدته.

وأي اقتراحات؟

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

المحلول

وعزمكم المنطقي، ستحتاج RequestContext معظم الوقت ونادرا ما يمكن حذفها بأمان لأسباب تتعلق بالأداء. والحل بسيط، بدلا من render_to_response الاختصار استخدام direct_to_template:

from django.views.generic.simple import direct_to_template

def contact(request):
    # snip ...
    return direct_to_template(request, 'contact.html', { 'myvar' : myvar })

... أو الديكور render_to من جانغو-مزعج :

from annoying.decorators import render_to

@render_to('template.html')
def foo(request):          
    bar = Bar.object.all()  
    return {'bar': bar}     

نصائح أخرى

وليس لديك بالضرورة أن تفعل أي شيء لترميز الملاحة لإعطاء الحالي نمط مختلف - هناك طرق التعريفي للقيام بذلك باستخدام CSS

.

وانظر جوابي هنا: <لأ href = "https://stackoverflow.com/questions/1024168/django-is-there-a-better-way-to-bold-the-current-page-link/1024214 # 1024214 "> جانغو: هل هناك طريقة أفضل لجريئة التيار رابط الصفحة للحصول على مثال

.

لتكون مرجعا في المستقبل، يمكن للمرء استخدام جانغو علامات التبويب للحصول على فعل ما يريد OP .

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