2012-02-15 12 views
5

मैं Django साइट रूट को Django व्यवस्थापक पैनल पर रीडायरेक्ट करने का प्रयास कर रहा हूं, और मुझे ज्यादातर इसे मिल गया है और चल रहा है। हालांकि, मैंने देखा है कि जब तक कि प्रोजेक्ट यूआरएल में कोई पिछला स्लैश न हो, पेज पर दिए गए लिंक में प्रोजेक्ट फ़ोल्डर शामिल नहीं होता है, और इसके बजाय साइट रूट में ऐप्स ढूंढने का प्रयास करें।व्यवस्थापक पैनल में Django रूट को रीडायरेक्ट करना

तो, मुझे लगता है कि मेरे पास एक परियोजना foo है, और एक ऐप bar है। यदि आप http://server/foo/ (पीछे की ओर स्लैश के साथ) पर जाते हैं, तो सब ठीक काम करता है, और पृष्ठ पर दिए गए लिंक http://server/foo/bar पर जाते हैं। हालांकि, अगर कोई http://server/foo पर जाता है, तो जेनरेट किए गए लिंक http://server/bar पर जाते हैं, जो 404 त्रुटि उत्पन्न करता है।

अगर मैं /foo/ बजाय /foo को इंगित करने के WSGIScriptAlias निर्धारित करते हैं, यह अगर मैं /foo पर नेविगेट एक 404 त्रुटि देना होगा। मैंने अपाचे में रीडायरेक्ट के साथ एक पिछला स्लैश लगाने की कोशिश की, लेकिन मैं एक रिकर्सिव रीडायरेक्ट उत्पन्न कर रहा हूं (http://server/foo//////...)। मैंने अभी तक .htaccess फ़ाइल का उपयोग करने की कोशिश नहीं की है, लेकिन मुझे संदेह है कि वही बात हो सकती है।

मैं urls.py में एक ही बात करने की कोशिश की, हालांकि:

url(r'^$', redirect_to, {'url': '/'}), # goes to server root http://server/ 
url(r'^$', redirect_to, {'url': 'foo/'}), # goes to http://server/foo/foo 
url(r'^$', redirect_to, {'url': '/foo/'}), # infinite redirect 

मैं भी बस एक स्लेश सभी Django यूआरएल के लिए इतना की तरह जोड़कर की कोशिश की:

url(r'^(.*)/', include(admin.site.urls)) 

लेकिन यह कुछ भी मैच के लिए विफल रहता है प्रोजेक्ट रूट फ़ोल्डर में सभी (हालांकि यदि आप ऐप पर नेविगेट करते हैं, तो यह ठीक काम करता है)।

मैं Apache 2.2 का उपयोग कर रहा mod_wsgi साथ, यहाँ विन्यास है:

Alias /static "C:/DJANGO~1/apps/django/django/contrib" 

<Directory 'C:/DJANGO~1/apps/django/django/contrib'> 
    Order allow,deny 
    Allow from all 
</Directory> 

WSGIScriptAlias /foo "C:/Djangostack/apps/django/scripts/django.wsgi" 

<Directory 'C:/Djangostack/apps/django/scripts'> 
    Order allow,deny 
    Allow from all 
</Directory> 

और यह urls.py कि ज्यादातर काम करता है:

urlpatterns = patterns('', 
    url(r'^', include(admin.site.urls)), 
) 

मुझे यकीन है कि बनाया है APPEND_SLASH पर सेट है सच है, लेकिन यह रूट प्रोजेक्ट फ़ोल्डर में काम नहीं कर रहा है।

+0

'/ foo' को'/bar' पर रीडायरेक्ट क्यों किया जाएगा? यह रीडायरेक्ट कहां हो रहा है? –

+0

यह वास्तव में '/ foo' को'/bar' पर रीडायरेक्ट नहीं किया जा रहा है - इसके बजाय, पृष्ठ पर जेनरेट किए गए यूआरएल '/ foo/bar' के बजाय'/bar' पर जाते हैं। – Hannele

उत्तर

1

अपने settings.py में APPEND_SLASH को सही करने का प्रयास करें। मुझे एक ही समस्या थी और यह मेरे लिए तय है। यह सच में डिफ़ॉल्ट होना चाहिए लेकिन मुझे इसे स्पष्ट रूप से सेट करना था।

+0

दुर्भाग्यवश इससे मदद नहीं मिली - यह प्रोजेक्ट रूट _but_ हर जगह काम करता है। – Hannele

+0

यह 'urls.py' किसके साथ काम नहीं करता है? ध्यान दें कि यह केवल स्लैश जोड़ देगा यदि यूआरएल स्लैश के बिना पैटर्न * से मेल नहीं खाता है। – aganders3

+0

मैंने इसे 'आर'^'', 'आर'^(। *)/'', और' आर '^ (। *)/$'' के साथ करने की कोशिश की, अभी भी कोई भाग्य नहीं है। मुझे संदेह है कि इसका मतलब है कि अपाचे में कॉन्फ़िगरेशन की आवश्यकता है, या किसी अन्य सिस्टम-व्यापी Django सेटिंग में। – Hannele

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