0

私のDjangoテンプレートでは:

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

DivはでAメソッドを呼び出す一般的な方法ですがviews.py、DivBはテンプレートタグ用です。

ユーザーはリンクを開きます。たとえば/myapp/test/、ページが開くと、そのページに2つのテンプレートタグセクションが含まれます。このタグの名前は、でrender_data各テンプレートタグにデータをロードしたいですAjax。それを操作するには、が必要request.ajax:です。だから私はviewsメソッドを書こうと思いました。私はそれを次の方法で完了すると思いました:

  • template tagin views.py(object_idパラメーターを渡すrenders_data)の正確なコピーを作成し、適切なテンプレートにレンダリングしました。テンプレートからmaypp/test削除した後に開くと。データを除く各テンプレートタグセクション(各コーナー)に( )がdiv A表示されます。このURL以外のコンテキストを表示する可能性はありますか?このオプションを選択すると画像が表示されますURLmyapp/test/<object_id>
  • renders_data次に、テンプレートタグ()にviewsメソッド()をインポートすることも考えましたrender_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))
    
    4

    1 に答える 1

    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'),
    )
    
    于 2012-06-18T21:00:46.877 に答える