2012-06-26 7 views
12

के साथ काम नहीं करते हैं मैं पुस्तक विवरण जानकारी प्रदर्शित करने के लिए django-cms का उपयोग कर रहा हूं। मुझे ऐप हुक के साथ एक स्लग स्वीकार करने के लिए पृष्ठ की आवश्यकता है जो निर्दिष्ट करता है कि कौन सी पुस्तक प्रदर्शित करने के लिए।django-cms: apphooks द्वारा उपयोग किए जाने वाले यूआरएल रिवर्स() या {% url%}

मैंने 'किताबें' नामक एक पृष्ठ बनाया और 'बुकडेंशन ऐप' को जोड़ा।

urlpatterns = patterns('', 
    url(r'^(?P<slug>[\w\-]+)?', BookDetailView.as_view(), name='book_detail'), 
) 

और यहाँ मेरी books.views फ़ाइल कैसा दिखता है:

class BooksApp (CMSApp): 
    name = _('Book Detail Page Application') 
    urls = ['books.urls'] 

apphook_pool.register(BooksApp) 

यहाँ क्या मेरी books.urls लग रहा है की तरह है:

यहाँ क्या मेरी books.cms_app फ़ाइल लग रहा है की तरह है

class BookDetailView (DetailView): 
    model = Book 
    template_name = 'layouts/book-detail.html' 
    context_object_name = 'book' 

यह सब ठीक काम करता है जब मैं सीधे विवरण पृष्ठ पर जाता हूं। तो http://localhost:8000/books/the-book-slug/ पर जाकर ठीक तरह से काम करता है कि मैं कैसे चाहता हूं।

समस्या यह है कि मुझे होम पेज पर प्रोमो से विशिष्ट पुस्तक विवरण पृष्ठों से लिंक करने में सक्षम होना चाहिए और अपेक्षित तरीकों में से कोई भी मेरे लिए काम नहीं कर रहा है।

Django-सेमी से PAGE_URL टेम्पलेट टैग का उपयोग करना काम नहीं करता है, क्योंकि यह केवल एक ही तर्क स्वीकार करता है, तो मैं स्लग निर्धारित करने के लिए जो पुस्तक प्रदर्शन करने के लिए आवश्यक प्रदान नहीं कर सकते: यह उम्मीद थी

<a href="{% page_url 'book_detail' %}">go</a> 

केवल http://localhost:8000/books/ पर रीडायरेक्ट करता है जो एक त्रुटि फेंकता है क्योंकि आवश्यक स्लग शामिल नहीं था।

तो मेरे अगले विकल्प यूआरएल टेम्पलेट टैग का उपयोग करना या मॉडल पर get_absolute_url() फ़ंक्शन को परिभाषित करना है। इन विकल्पों में से न तो काम करते हैं:

<a href="{% url book_detail book.slug %}">go</a> 

def get_absolute_url(self): 
    return reverse('book_detail', args=[self.slug]) 

इन दोनों परिणाम एक NoReverseMatch: Reverse for 'book_detail' not found त्रुटि में।

यदि मैं पुस्तकों को शामिल करता हूं तो मेरी मुख्य यूआरएल conf में confur। यह काम करता है। तो ऐसा लगता है कि अगर यूआरएल का उपयोग केवल एक सीएमएस एपहुक द्वारा किया जा रहा है कि इसे डीजेंगो द्वारा उलट नहीं किया जा सकता है।

मेरे मुख्य यूआरएल में books.urls सहित एक गंदे समाधान की तरह लगता है और मैं निश्चित रूप से टेम्पलेट या get_absolute_url फ़ंक्शन में यूआरएल को हार्डकोड नहीं करना चाहता हूं। उन समाधानों में से कोई भी 'पायथनस्क' नहीं लगता है।

कोई सुझाव?

संपादित करें:

रिवर्स केवल अगर मैं भाषा नाम स्थान का उपयोग काम करता है। दस्तावेज निर्दिष्ट करने के लिए भाषा नामस्थान की आवश्यकता नहीं होनी चाहिए।

>>> reverse('en:book_detail', args=[book.slug]) 
+1

मुझे कुछ समय पहले एक ही समस्या है। मुझे लगता है कि यह django-cms में एक बग है। जहां तक ​​मुझे याद है कि मैंने अपना खुद का रिवर्स टेम्पलेट टैग लागू किया है जो इस समस्या को ठीक करता है, क्योंकि मेरे पास इस बग को स्रोत में ठीक करने और पुल अनुरोध बनाने के लिए पर्याप्त समय नहीं था। यह रिपोर्ट करना और ठीक करना बहुत अच्छा होगा। –

उत्तर

8

जाहिरा तौर पर यह हमारे आवेदन cms.middleware.multilingual.MultilingualURLMiddleware होने जो तब भाषा नाम स्थान की आवश्यकता होती है करने के लिए सभी {% url %} टेम्पलेट टैग और reverse() समारोह मजबूर के कारण था।

चूंकि हमारी साइट स्थानीयकृत नहीं है, इसलिए मिडलवेयर को हटाकर ठीक काम किया गया। प्रलेखन ऐसा नहीं लगता था कि इस पर मुझे स्पष्ट किया गया और अंततः दूसरे स्रोत से उत्तर मिला।

+0

क्या इसके लिए कोई परीक्षण है? ऐसा लगता है कि उस वर्ग को सीएमएस मिडलवेयर से हटा दिया गया है, लेकिन मैं अभी भी 'यूआरएल पैटर्न' url (r '^ (? पी \ डी +)/$ ',' विस्तार ', नाम = "gallery_images"), ' –

+2

ऐसा लगता है कि संस्करण 2.4 के बाद से तय किया गया है, कृपया उन्नयन से पहले दस्तावेज़ पढ़ें, आपको [कुछ चरणों का पालन करें] (http: // docs। django-cms.org/en/3.0.1/upgrade/2.4.html) अपग्रेड करते समय। –

संबंधित मुद्दे

 संबंधित मुद्दे