2012-03-18 10 views
0

jqueryのような選択で、私のdjangoテンプレートを取得したいと思います。djangoテンプレート(html)でjqueryのようなセレクタを使って、そのテンプレートの一部を取得するにはどうすればいいですか?

例:

{% extends "base.html" %} 

{% block content %} 
<h1>{{ title }}</h1> 
<h2>Category: {{ name }}</h2> 

<p class="desc">{{ phase.name }}. Since : {{ due_date|date:"d/m/Y H:i:s" }}</p> 

<div id="list"> 
    <ul> 
     {% for o news.all %} 
     <li> 
      <a href="{{ o.url }}">{{ o.title }}</a> - Value: {{ o.value }} 
     </li> 
     {% endfor %} 
    </ul> 
</div> 

{% endblock %} 

piece = pyq("#list ul") 

作品は

<ul> 
    {% for o news.all %} 
    <li> 
     <a href="{{ o.url }}">{{ o.title }}</a> - Value: {{ o.value }} 
    </li> 
    {% endfor %} 
</ul> 

私はこれを行うことができるようパッケージ/アプリはありますでしょう私が行う場合は?

そうでない場合、これを達成する最も速い解決策は何ですか?それは可能か、それとも難しいですか?

私はAJAXのためにたくさんのフラグメント(インクルード付き)を作成したくないので、それを取得したいと思います。

PS:私はかなりjQueryとDjangoテンプレート(タグとフィルタを含む)に慣れています。もちろん、djangoで私はこれを行うことはできませんので、私は存在する場合はパッケージ/アプリを求めています。たぶん質問は、私の英語が悪い、明確ではありません:(

答えて

1

テンプレートにアクセスしたい場合、それはあなたが欲しいだけのコードでテンプレートを作成することができますレンダリングされる前に。

#your_news_list_template.html 
<ul> 
    {% for o news.all %} 
<li> 
    <a href="{{ o.url }}">{{ o.title }}</a> - Value: {{ o.value }} 
</li> 
    {% endfor %} 
</ul> 

することができますその後、他のテンプレートで、または単にそれを文字列にレンダリングすることを含んでいる。

{% include "path/to/your_news_list_template.html" %}

あなたがこれを行う場合は、あなたのコンテキスト

newsを含めることを確認してください

https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#includeこれを文書化してください。これにより、どのブロックでもこのブロックを再利用できます。

あなたがHTMLを必要とする場合Djangoはそれをレンダリングした後に、下記のライブラリのいずれかを使用できます。

あなたはSpynnerライブラリとjqueryのセレクタを使用してHTMLを解析することができます。それはあなたが念頭に置いていたものよりもオーバーヘッドが多いかもしれません。 http://pypi.python.org/pypi/spynner

私は、要素を選択するためにjqueryのような構文を使用できるpyqueryについて知りました。 http://packages.python.org/pyquery/

+0

しかし、pyqueryは純粋なhtmlでしかdjangoのテンプレートでこれをしません。 それはポイントです:私はAJAX経由でリロードする必要がある各フラグメントのインクルードをしたくありません。 とにかく私はspynnerを知りませんでした、役に立つリンクthanx – apelliciari

+0

@avastregなぜajaxの仕事が含まれていないのでしょうか?通常、テンプレートフラグメントはajaxに最適です。より多くのニュース項目を読み込むajax呼び出しがあれば、news_itemsテンプレートを持つのが理にかなっています。 – dm03514

+0

私の願いは、ピースを抽出する必要なく、単にajaxリクエストでdivを指し、テンプレートを作成してそれをページに含めることを避けることです。 このようにして、私はajax呼び出しを作成してテンプレートに触れないようにするか、または他のものを含めて作成することができます。 – apelliciari

1

jQueryを使用すると、WebページのHTMLの一部しか選択できません。 Djangoテンプレートは、 HTMLを生成するために使用されるため、Djangoテンプレートの一部を選択するためには使用できません。これは、jQueryが動作するまでにDjangoの構文が既に 'なくなった'ことを意味します。あなたのケースでは、jQueryセレクタはulをそのままHTMLで選択できますが、Django固有のコードやテンプレート構文は含まれません。

+0

jqueryのようなものではなく、もちろんjQueryです。 pyquery http://packages.python.org/pyquery/index.html#のようなものが必要ですが、djangoテンプレート – apelliciari

関連する問題