2011-08-01 13 views
6

इस मैं क्या इसलिए मैं यह क्या है का वर्णन शुरू होगा करने के लिए कोशिश कर रहा हूँ करने के लिए बहुत विशिष्ट है का उपयोग करते हुए: की तरह http://localhost:6543/path/to/myplot/plot001.png अजगर पिरामिड मार्ग विन्यास में क्वेरी स्ट्रिंग

    • एक पिरामिड एप्लिकेशन की सेवा भूखंडों अगर साजिश है उपलब्ध नहीं है एक और छवि परोसा जाता है (work.png)
    • दूसरा भाग विकृत दृश्य है जो एक प्लॉट के लिए कॉन्फ़िगरेशन दर्ज करने के लिए एक HTML फॉर्म प्रदान करता है जैसे: http://localhost:6543/path/to/myplot/plot001.png?action=edit। यहां क्वेरी स्ट्रिंग "एक्शन = एडिट" नोट करें।
    • विन्यास datafile के होते हैं, टेम्पलेट्स आदि
    • रूप है (config को बचाने के लिए) और बटन (http प्रस्तुत करना बचाने: // स्थानीय होस्ट: 6543/path/to/myplot/plot001.png कार्रवाई = प्रस्तुत करना)। एक पीएनजी फ़ाइल में परिणाम प्रस्तुत करना जो तब एक स्थिर तरीके से उपयोग किया जाता है।

    मैंने Matplotlib आदि का उपयोग करके प्रतिपादन जैसे सभी टुकड़े निकाले लेकिन मैं पिरामिड और विकृति के लिए नया हूं। मेरे पास एक कामकाजी दृश्य भी है जो फाइल से साजिश परोसता है। विकृत रूप भी काम करता है। फिलहाल यह स्पष्ट नहीं है कि यूएलआर को सबसे अच्छी तरह से संरचनाओं को संपादित करने, संपादित करने और प्रस्तुत करने के लिए कैसे व्यवस्थित किया जाए। मुझे लगता है कि पिरामिड टॉक में इसका मतलब है कि serv_view और edit_view के लिए मार्गों को कैसे कॉन्फ़िगर करें।

    __init__.py: 
        config.add_route('serve_route', 
         '/{project_name}/testruns/{testrun_name}/plots/{plot_name}.png') 
        config.add_route('edit_route', 
         '/{project_name}/testruns/{testrun_name}/plots/{plot_name}.png') 
    # can I use query strings like "?action=edit" here to distinguish the difference? 
    
    
    views.py: 
    @view_config(context=Root, route_name='serve_route') 
    def plot_view(context, request): 
    ... 
    @view_config(context=Root, renderer='bunseki:templates/form.pt', route_name='edit_route') 
    def edit_view(request): 
    ... 
    

    मैं पिरामिड मैनुअल मैं रूट में पैरामीटर सेट करने के संदर्भ में संदर्भ नहीं पा रहा था। मुझे लगता है कि कुछ दस्तावेज या नमूना के लिए एक सूचक पर्याप्त होगा और मैं खुद को विवरण समझ सकता हूं। धन्यवाद!

  • +0

    पिरामिड एक तंत्र वे Multidict फोन है। मुझे लगता है कि क्वेरी स्ट्रिंग तक पहुंचने का यह तरीका है। मैं दो विचारों की साजिश को विलय कर दूंगा और एक में संपादित कर दूंगा: अगर अनुरोध में 'संपादित करें'। GET.getall ('action'): # कॉन्फ़िगरेशन संपादित करें – mark

    +0

    आप जो कहते हैं उपरोक्त टिप्पणी ठीक है और शायद यह तरीका है कि मैं इसे करूँगा; आप वैकल्पिक रूप से add_route कथन में कस्टम अनुमान जोड़ सकते हैं जो मिलान उद्देश्यों के लिए क्वेरी स्ट्रिंग पर दो मार्गों को असंबद्ध कर देगा। Http://docs.pylonsproject.org/projects/pyramid/1.1/narr/urldispatch.html#custom-route-predicates –

    उत्तर

    11

    वहाँ के दो तरीके हैं अपने कोड को अलग करने के लिए आप जो पसंद करते हैं उसके आधार पर ऐसा करें।

    1. आपके विचार, request.GET.get('action') पर 'अगर' कथन से अलग में तर्क के सभी रखो।

      config.add_route('plot', '/{project_name}/testruns/{testrun_name}/plots/{plot_name}.png') 
      config.scan() 
      
      @view_config(route_name='plot') 
      def plot_view(request): 
          action = request.GET('action') 
          if action == 'edit': 
           # do something 
           return render_to_response('bunseki:templates/form.pt', {}, request) 
      
          # return the png 
      
    2. रजिस्टर के कई दृश्य हैं और उन दोनों के बीच प्रतिनिधि पिरामिड का दृष्टिकोण देखने यांत्रिकी का उपयोग कर।

      config.add_route('plot', '/{project_name}/testruns/{testrun_name}/plots/{plot_name}.png') 
      config.scan() 
      
      @view_config(route_name='plot') 
      def plot_image_view(request): 
          # return the plot image 
      
      @view_config(route_name='plot', request_param='action=edit', 
            renderer='bunseki:templates/form.pt') 
      def edit_plot_view(request): 
          # edit the plot 
          return {} 
      
      # etc.. 
      

    आशा इस मदद करता है। यह एक यूआरएल पैटर्न को पंजीकृत करने और उस यूआरएल पर विभिन्न प्रकार के अनुरोधों के लिए अलग-अलग विचारों का उपयोग करने का एक उत्कृष्ट उदाहरण है।

    +0

    request_param = 'action = edit' यह है! मैं इसके बारे में निकल रहा हूं। पिरामिड बहुत अच्छा है! – mark

    1

    मुझे यकीन नहीं है कि आप उस स्थिति में contex=Root का उपयोग कर सकते हैं, लेकिन आप जो पूछ रहे हैं वह शायद matchdict है।

    __init__.py:

    config.add_route('serve_route', 
        '/{project_name}/testruns/{testrun_name}/plots/{plot_name}.png') 
    

    views.py:

    @view_config(route_name='serve_route') 
    def plot_view(request): 
        project_name = request.matchdict['project_name'] 
        action = request.params.get('action', None) 
    

    http://docs.pylonsproject.org/projects/pyramid/1.1/narr/urldispatch.html#matchdict

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

    अपने प्रश्न मार्ग के बारे में और अधिक एक सामान्य प्रश्न है, तो आपको ओ बनाना चाहिए आपके दृश्य कार्यों के कोड को कम और स्पष्ट रखने के लिए प्रति मार्ग प्रति मार्ग। उदाहरण के लिए, अगर आप को संपादित करने और प्रस्तुत करना चाहते हैं, तो अपने मार्गों कुछ ऐसा दिखाई दे सकता:

    __init__.py:

    config.add_route('render_plot', 
        '/{project_name}/testruns/{testrun_name}/plots/{plot_name}.png') 
    config.add_route('edit_plot', 
        '/{project_name}/testruns/{testrun_name}/plots/{plot_name}/edit') 
    

    views.py:

    @view_config('render_plot') 
    def render(request): 
        pass 
    
    @view_config('edit_plot', renderer='bunseki:templates/form.pt') 
    def edit(request): 
        pass 
    
    +1

    मुझे नहीं लगता कि यह मिलान यूआरएल पैरामीटर के लिए जाने का तरीका है। पैरामीटर्स में एक निर्धारित क्रम नहीं है। मेरा मतलब है कि यदि आपके पास एक से अधिक पैरामीटर हैं तो आप उन्हें बदल सकते हैं। जहां तक ​​मैं मैचडिक्ट समझता हूं, इसका मतलब है "?" के बाईं तरफ यूआरएल भाग को कवर करना। – mark

    0

    यूआरएल में कार्रवाई निर्दिष्ट करने का एक और प्रभावी तरीका होगा। और आप एक ही रूट नाम या एकाधिक पर विभिन्न कार्रवाइयां भी कर सकते हैं।

    config.add_route('serve_route', '/{project_name}/testruns/{testrun_name}/plots/{action}/{plot_name}.png') 
    
    views.py 
    @view_config(context=Root, route_name='serve_route', action='view') 
    def plot_view(request): 
        pass 
    

    या क्वेरी स्ट्रिंग के साथ

    `config.add_route('serve_route', 
        '/{project_name}/testruns/{testrun_name}/plots/{plot_name}.png') 
    
    views.py 
    @view_config(context=Root, route_name='serve_route') 
    def plot_view(request): 
        try: 
         action = getattr(self._request.GET, 'action') 
        except AttributeError: 
         raise 
    
    संबंधित मुद्दे