2012-06-18 27 views
0

在我的Django的模板:如何使用Django視圖和模板標籤simultanosly?

<div class="A"> 
    {% url renders_data object.id %} 
</div> 
<div class="B"> 
    {% render_data object.id %} 
</div> 

股利A是調用一個方法views.py,而事業部B是模板標籤常見的方式。

用戶將打開一個鏈接。假設:/myapp/test/一個頁面將在頁面中包含兩個模板標籤部分。此標記的名稱是render_data我想將數據加載到Ajax的每個模板標記中。要使用它,我們需要request.ajax:。這就是爲什麼我認爲寫視圖的方法。我想用下面的方式來完成它:

  • 我寫的template tag的精確副本中views.py(renders_data與傳遞OBJECT_ID參數)並使其以合適的模板。當我從模板中刪除div A後打開maypp/test。它在每個模板標籤部分(每個角落)顯示URLmyapp/test/<object_id>)以外的數據。是他們的任何可能性,以顯示上下文除了這個URL See the image when i choose this option
  • 其次我也想過導入模板標籤(render_data)的觀點方法(renders_data)。這樣,數據將顯示在每個角落,request.Ajax:也將工作。如果這可能,那麼如何?
  • 我無法解決此問題。請幫我:(

    見render_data的樣子:

    @register.simple_tag 
    def render_widget(object_id): 
        from myapp.plugins.model import Widgetsetting 
        widget_setting = Widetsetting.objects.get(id = object_id) 
        widget = widget_settings.get_widget() 
        template_name = widget.template_name 
        context = widget.context(widget=widget_settings) 
        t = get_template("widgets/%s" % template_name) 
        return t.render(Context(context)) 
    
    +0

    聽不懂你的問題!如果你需要ajax調用,然後爲它寫代碼。請詳細說明您嘗試過的方法以及哪些錯誤即將到來? – Ahsan

    +0

    @Ahsan我想用Ajax加載模板標籤中的數據。我應該怎麼做? 這是我的問題。所以對此我嘗試了兩種方法,並沒有發生錯誤(我已經提到了問題)。當我嘗試使用第一個時,它顯示了我在Django模板中的模板標籤部分中的URL。 –

    +0

    @Ahsan查看圖片的第一個選項(有問題更新) –

    回答

    1

    從你的代碼已經發布類似下面應該工作...

    在views.py

    from django.http import HttpResponse 
    from netadmin.plugins.templatetags.widgets import render_widget 
    
    def ajax_render_data(request, object_id): 
        return HttpResponse(render_widget(object_id)) 
    

    在你的django模板中:
    (你說你想在頁面上看到其中的幾個,所以我要在django模板中使用一個循環,我不知道嗷嗷你的小部件集合稱爲,但我敢肯定,你可以將它解決您的特定情況下)

    <div class="widgets-container"> 
        {% for widget_settings in widgetsettings.objects.all %} 
        <div class="widget-content" id="widget-content-{{ widget_settings.pk }}"> 
         not loaded yet 
        </div> 
        {% endfor %} 
    </div> 
    
    <script> 
    // here we use django to render the ajax urls into an object 
    // in javascript so we can use it on the client side 
    var ajax_urls = { 
        {% for widget_settings in widgetsettings.objects.all %} 
        "{{ widget_settings.pk }}: "{% url ajax_render_data widget_settings.pk %}"{% if not forloop.last %},{% endif %} 
        {% endfor %} 
    }; 
    
    // (I'll assume you're using jQuery) 
    // start the ajax calls when the page is loaded: 
    $(document).ready(loadWidgets()); 
    
    function loadWidgets() { 
        // loop over the urls we provided from django: 
        jQuery.each(ajax_urls, function(widget_id, url) { 
         // do the ajax call: 
         $.get(url, function(data) { 
          // put the content into the widget div: 
          $('#widget-content-'+widget_id).html(data); 
         }); 
        }); 
    } 
    </script> 
    

    在urls.py:

    urlpatterns += patterns('netadmin.plugins.ajax_view', 
        url(r'^ajax/(?P<object_id>\d+)/$', 'ajax_render_data', name='ajax_render_data'), 
    ) 
    
    +0

    這應該寫在views.py中。 Ajax部分是否也用這種方法編寫?還有一件事我應該打開這個鏈接ajax_render_data它有不同的網址模式,模板標籤有不同的地方。我的意思是說有一個base.html存在。我在其中添加模板標記代碼{{render_data object.id}}。如果我打開這一個,那麼視圖部分將如何工作? –

    +0

    你在說這個: 檢查這個網址:'http://codepad.org/PEa2sGmc'。 –

    +0

    見編輯答案。如果您只想通過ajax加載內容,您可以忽略HTML模板中的{%render_widget widget_settings.pk%}。 – Anentropic