2011-06-16 14 views
5

यह मेरा कोड है:django process_request का उपयोग कर यूआरएल को कैसे बदलें।

class MobileMiddleware(object): 

    def process_request(self, request): 
     if request.path.startswith('/core/mypage/'): 
      request.path='/core/mypage/?key=value' 
      print request.path,'aaaa' 

मैं एक परम key जब पेज यूआरएल /core/mypage/ है जोड़ना चाहते हैं,

और वेब ब्राउज़र का यूआरएल http:www.ss.com/core/mypage/?key=value

से बदल दिया जाएगा हालांकि, ब्राउज़र में यूआरएल नहीं बदला गया है।

मैं क्या कर सकता हूं?

उत्तर

3

समस्या यह है कि HttpRequest.path एक सादा विशेषता है। इसे बदलना ब्राउज़र के लिए कोई नया निर्देश नहीं बनाता है। आप शायद redirect विधि की तलाश कर रहे हैं जो वास्तव में ब्राउज़र को कहीं और जाने के लिए मजबूर करेगा।

+0

लेकिन यह बहुत सारे प्रदर्शन का उपभोग करेगा, यह 302 कूद है, क्या हम django कोर कोड बदल सकते हैं? – zjm1126

+1

क्लाइंट का ब्राउज़र यूआरएल के रूप में दिखाए जाने के केवल दो तरीके हैं (जो मुझे लगता है कि आप पूछ रहे हैं)। सबसे पहले रीडायरेक्ट या हेडर का उपयोग वास्तव में उन्हें किसी अन्य स्थान पर भेजने के लिए करना है। दूसरा उन्हें जेएस का उपयोग रीडायरेक्ट करने के लिए करना है। किसी भी तरह से आप पेज रीफ्रेश के बारे में बात कर रहे हैं। यह वही है कि ब्राउज़र कैसे काम करते हैं। – cwallenpoole

0

प्रयास करें यह

return HttpResponseRedirect('/core/mypage/?key=value') 
+0

लेकिन यह बहुत सारे प्रदर्शन का उपभोग करेगा, यह 302 कूद है, क्या हम django कोर कोड बदल सकते हैं? प्रश्न में तर्क के साथ – zjm1126

+0

, यह रीडायरेक्ट का अनंत लूप होगा क्योंकि अनुरोध अभी भी 'कोर/mypage' – radtek

0

मैं इस परीक्षण नहीं किया है, लेकिन जैसे request.GET["key"] = val

संपादित कुछ प्रयास करें: या हो सकता है बजाय request.path_info का उपयोग request.path

9

की Googler के लिए - मैं के साथ परीक्षण किया request.path_info। यदि आप मिडलवेयर में यूआरएल बदलना चाहते हैं, तो process_request में request.path_info बदलें।

request.path_info = <change request.path_info> 

कृपया ध्यान दें कि मैं इसका उपयोग करने या सुझाव देने का सुझाव नहीं देता हूं। मैं बस इतना कह रहा हूं कि क्या आप यूआरएल बदलना चाहते हैं, यही वह तरीका है जिसे आप कर सकते हैं।

+0

से शुरू होता है, हालांकि, यह वास्तव में सही अनुरोध करता है, ब्राउजर में यूआरएल नहीं बदला। मुझे नहीं लगता कि यह एक रीडायरेक्ट के बिना होगा। – radtek

1

request.path_info मेरे लिए ब्राउज़र पता पट्टी में यूआरएल को बदल दिया है लेकिन इस रीडायरेक्ट किया:

from django.shortcuts import redirect 


class DomainRedirectMiddleware(object): 

    def process_request(self, request): 

     if request.path.startswith('/core/mypage/') and not request.GET: 
      return redirect('/core/mypage/?key=value') # works! 
      #request.path_info = '/core/mypage/?key=value' # works, but does not change url in browser address bar 

Django भी एक "पुनर्निर्देश एप्लिकेशन" Django 1.3 है, जो निम्नलिखित मिडलवेयर शामिल के बाद से प्रदान करता है: 'django.contrib.redirects.middleware.RedirectFallbackMiddleware'। redirects app documentation देखें, यह आपको व्यवस्थापक इंटरफ़ेस से रीडायरेक्ट बनाने देता है।

मैंने ऐप का उपयोग करके उसी रीडायरेक्ट की कोशिश की और यह काम किया। चीयर्स!

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