2011-03-18 11 views
11

से URL का पहला भाग प्राप्त करें I request.path का उपयोग करें। उदाहरण के लिए यदि वर्तमान यूआरएल "/ test/foo/baz" है, तो मैं जानना चाहता हूं कि यह स्ट्रिंग अनुक्रम के साथ शुरू होता है, मान लें/परीक्षण करें। अगर मैं इस्तेमाल करने की कोशिश:वर्तमान URL प्राप्त करने के लिए Django टेम्पलेट

{% if request.path.startswith('/test') %} 
    Test 
{% endif %} 

मैं एक त्रुटि कह रही है कि यह अभिव्यक्ति के शेष पार्स नहीं कर सके मिलती है:

Could not parse the remainder: '('/test')' from 'request.path.startswith('/test')' 
Request Method: GET 
Request URL: http://localhost:8021/test/foo/baz/ 
Exception Type: TemplateSyntaxError 
Exception Value:  
Could not parse the remainder: '('/test')' from 'request.path.startswith('/test')' 
Exception Location: C:\Python25\lib\site-packages\django\template\__init__.py in __init__, line 528 
Python Executable: C:\Python25\python.exe 
Python Version: 2.5.4 
Template error 

एक समाधान काम करने के लिए एक कस्टम टैग बनाने के लिए किया जाएगा। क्या मेरी समस्या को हल करने के लिए कुछ और मौजूद है? इस्तेमाल किया Django संस्करण 1.0.4 है।

उत्तर

5

आप django टेम्पलेट के भीतर से सामान्य पायथन कार्यों के लिए तर्क पारित नहीं कर सकते हैं। आपको समस्या हल करने के लिए आपको एक कस्टम टेम्पलेट टैग की आवश्यकता होगी: http://djangosnippets.org/snippets/806/

3

आप डिज़ाइन द्वारा, Django टेम्पलेट्स से तर्कों के साथ कार्यों को कॉल नहीं कर सकते हैं।

{% if is_test %} 
    Test 
{% endif %} 

:

def index(request): 
    c = {'is_test' : request.path.startswith('/test')} 
    return render_to_response('index.html', c, context_instance=RequestContext(request)) 

तो फिर तुम एक is_test चर आप अपने टेम्पलेट में उपयोग कर सकते हैं:

एक आसान दृष्टिकोण, राज्य आप अपने अनुरोध के संदर्भ में की जरूरत है डाल करने के लिए इस तरह है इस दृष्टिकोण में आपके टेम्पलेट से सटीक पथ परीक्षण ('/ test') को सारणित करने का लाभ भी है, जो सहायक हो सकता है।

0

दर्शन अनुभाग से this page of Django docs में:

टेम्पलेट प्रणाली मनमाना अजगर भाव

पर अमल नहीं करेंगे आप वास्तव में एक कस्टम टैग लिख सकते हैं या यदि टेम्पलेट सूचित करने के लिए एक चर पास करना चाहिए पथ '/test'

55

के साथ शुरू होता है आप यूआरएल

का पहला भाग प्राप्त करने के लिए स्लाइस फ़िल्टर का उपयोग कर सकते हैं
{% if request.path|slice:":5" == '/test' %} 
    Test 
{% endif %} 

अब यह कोशिश नहीं कर सकते हैं, और यदि फिल्टर, अंदर काम 'अगर' टैग के लिए जाँच की

{% with request.path|slice:":5" as path %} 
    {% if path == '/test' %} 
    Test 
    {% endif %} 
{% endwith %} 
+0

मुझे 'अगर' कथन अनुचित रूप से त्रुटियों को स्वरूपित करता है। – Seitaridis

+2

मेरे लिए यह ठीक काम कर रहा है – Ted

+0

आपका पहला समाधान ठीक काम करता है! :) –

22

इसके बजाय पता नहीं है अगर आप टैग 'के साथ' का उपयोग कर सकते काम नहीं करता है शुरुआत के साथ उपसर्ग, आप बिल्टिन in टैग के साथ सदस्यता की जांच करके एक ही चीज़ प्राप्त कर सकते हैं।

{% if '/test' in request.path %} 
    Test 
{% endif %} 

इस मामलों में जहां स्ट्रिंग शुरुआत में सख्ती से नहीं है पारित करेंगे, लेकिन आप बस यूआरएल के उन प्रकार से बच सकते हैं।

+0

यह वही है जो मैं चाहता था। धन्यवाद! निश्चित रूप से यहां सबसे अच्छा जवाब है। –

+6

कुछ मामलों में काम नहीं करेगा अगर हमें यह पता लगाना है कि हम किसी साइट के कुछ हिस्सों में हैं या नहीं। उदाहरण के लिए, हमें यह पता होना चाहिए कि हम "पाठ्यक्रम" अनुभाग में हैं। '/ पाठ्यक्रम/1 /' - ठीक है, '/ लॉगिन /? अगला =/पाठ्यक्रम/1 /' - ठीक नहीं है। – Marboni

0

मैं ऐसे मामले में संदर्भ प्रोसेसर का उपयोग करता हूं:

*। फ़ाइल कोर/context_processors.py के साथ बनाएँ:

def variables(request): 
     url_parts = request.path.split('/') 
     return { 
      'url_part_1': url_parts[1], 
     } 

*।रिकॉर्ड जोड़ें:

'core.context_processors.variables', 

सेटिंग्स.py में टेम्पलेट्स 'context_processors' सूची में सेटिंग्स.py में।

*।

{{ url_part_1 }} 

किसी भी टेम्पलेट में उपयोग करें।

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