2010-01-22 18 views
21

मेरी urls.py में करने के लिए कई तर्क पारित करने के लिए मेरे पास है:Django - कैसे यूआरएल टेम्पलेट टैग

(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/section/(?P<slug>[-\w]+)/$', 
    'paper.views.issue_section_detail', 
    {}, 
    'paper_issue_section_detail' 
), 

और मैं एक टेम्पलेट में यह करने के लिए कोशिश कर रहा हूँ:

{% url paper_issue_section_detail issue.pub_date.year,issue.pub_date.month,issue.pub_date.day,section_li.slug %} 

लेकिन मुझे यह त्रुटि मिलती है:

TemplateSyntaxError 
Caught an exception while rendering: Reverse for 'paper_issue_section_detail' with arguments '(2010, 1, 22, u'business')' and keyword arguments '{}' not found. 

हालांकि, अगर मैं केवल एक तर्क की आवश्यकता के लिए यूआरएल पैटर्न बदलता हूं तो यह ठीक काम करता है। अर्थात्:

(r'^(?P<year>\d{4})/$', 
    'paper.views.issue_section_detail', 
    {}, 
    'paper_issue_section_detail' 
), 

और:

{% url paper_issue_section_detail issue.pub_date.year %} 

तो यह शिकायत करने के लिए जब मैं एक ही तर्क 'url' टेम्पलेट टैग का उपयोग कर अधिक से अधिक पारित लगता है - मैं दो तर्क के साथ एक ही त्रुटि मिलती है। क्या कई तर्क पारित करने का कोई अलग तरीका है? मैंने नामित कीवर्ड तर्कों में गुजरने का प्रयास किया है और यह एक समान त्रुटि उत्पन्न करता है।

क्या इसके लायक है के लिए, संबंधित दृश्य इस तरह शुरू होता है:

def issue_section_detail(request, year, month, day, slug): 

मैं कैसे यूआरएल टेम्पलेट टैग के लिए एक एकल तर्क की तुलना में अधिक से पारित करते हैं?

उत्तर

8

समस्या आपके यूआरएल कॉन्फ़िगरेशन के /(?P<month>\d{2})/ भाग में रहती है। यह केवल दो अंक (\d{2}) की अनुमति देता है जबकि issue.pub_date.month केवल एक अंक है।

आप या तो कर सकते हैं भी URL में एक अंक की अनुमति देने के (लेकिन यह अद्वितीय URL के सिद्धांत का उल्लंघन होगा, /2010/1/.../2010/01/... के रूप में ही होगा) या अपने यूआरएल templatetag में महीने के तर्क के लिए दो अंक गुजरती हैं।
आप दिनांक वस्तुओं के लगातार गठन को प्राप्त करने के लिए date फ़िल्टर का उपयोग कर सकते हैं। माह और दिन तर्क पर

{% url paper_issue_section_detail issue.pub_date|date:"Y",issue.pub_date|date:"m",issue.pub_date|date:"d",section_li.slug %} 

देखो: इस तरह यूआरएल टैग का प्रयोग करें यह हमेशा (एक अग्रणी शून्य यदि आवश्यक हो तो) के साथ दो अंकों के रूप में प्रदर्शित किया जाएगा। date फ़िल्टर के लिए कौन से विकल्प संभव हैं, यह देखने के लिए documentation of the now tag पर एक नज़र डालें।

+0

यह बहुत अच्छा लगता है - मैं वास्तव में यूआरएल के लिए संभावित स्वरूपण को बदलना नहीं चाहता हूं। लेकिन जब मैं मुद्दा करता हूं.pub_date.month | दिनांक: "एम" तो एक खाली स्ट्रिंग यूआरएल/व्यू को पास हो जाती है। –

+1

आप सही हैं - मुझे खेद है। मुझे स्पष्ट रूप से मूल पोस्ट में गलत था। मैंने 'यूआरएल' टैग को सही किया। आपको 'issue.pub_date | date:" m "' issue.pub_date.month की बजाय "m" का उपयोग करना होगा। दिनांक: "m" '। 'दिनांक' फ़िल्टर 'डेटाटाइम' ऑब्जेक्ट्स (pub_date विशेषता) पर काम करता है और पूर्णांक (pub_date.month विशेषता) पर नहीं। –

+0

दोह, ज़ाहिर है, मुझे भी यह देखना चाहिए था। मदद ग्रेगोर के लिए धन्यवाद भार। –

5

आपकी महीने अभिव्यक्ति (?P<month>\d{2}) है, लेकिन आप इसे 1 पर तर्क भेज रहे हैं। 1\d{2} से मेल नहीं खाता है, इसलिए यूआरएल रिज़ॉल्वर आपका विचार नहीं ढूंढ रहा है।

महीने अभिव्यक्ति को \d{1,2} (या उस प्रभाव से कुछ) में बदलने का प्रयास करें।

+0

धन्यवाद अपने सुझाव सेठ के लिए एक बहुत - मैं regexp और क्या मैं इसे करने के लिए पारित करने के लिए कोशिश कर रहा था के बीच संबंध नहीं बना दिया था। लेकिन मैं यूआरएल पर प्रतिबंध को कम नहीं करना चाहता था, इसलिए अब मैं ग्रेगोर मुल्लेगर के सुझाव का उपयोग करके जो भी पास करता हूं उसका प्रारूप बदल रहा हूं। –

12

मुझे एक ही समस्या थी (मैं Django 1.3 का उपयोग कर रहा हूं।1) और कोशिश की ग्रेगर Müllegger के सुझाव, लेकिन वह दो कारणों के लिए काम नहीं किया:

  • वहाँ वर्ष, माह और दिन के बीच कोई अल्पविराम का होना चाहिए महत्व देता
  • मेरी कक्षा आधारित सामान्य दृश्य केवल कीवर्ड लेने के लिए लगता है तर्क

इस प्रकार केवल काम कर समाधान किया गया था:

{% url news_detail slug=object.slug year=object.date|date:"Y" month=object.date|date:"m" day=object.date|date:"d" %} 
संबंधित मुद्दे