0

クラスター化されたニュース記事のリストを表示する Django アプリケーションを作成しました。最初のページに 3 つの記事だけを表示したいのですが、ユーザーがそれらすべてを表示したい場合は、[実際の報道を見る] リンクをクリックして、記事の全体的なリストを (GoogleNews の機能として) 見ることができます。メイン ページでは、 listaという変数に記事のリストがあります。そして、メイン ページの最初の 3 つの要素だけを公開し、新しいページに記事のリストを転送したいと考えています。次のように、views.py ファイルにテーマ関数を追加します。

def theme(request,argument):
    lista=argument
    return render(request,'theme.html', locals())

そして、テーマ関数を呼び出すmain.htmlコードは次のとおりです。

<a href="{% url "mysite.views.theme" argument=lista %} target="_blank">

または私が試します:

<a href="{% url "mysite.views.theme" lista %} target="_blank">

urls.pyコードは次のとおりです。

urlpatterns = patterns('',
    ('^main/$', main),
    ('^all/$', tegjitha),
    ('^(sport)/$', gen),
    ('^(teknologji)/$', gen),
    ('^(showbiz)/$', gen),
    ('^(bota)/$', gen),
    ('^(ekonomi)/$', gen),
    ('^(kulture)/$', gen),
    ('^(theme)/$', theme),

NoReverseMatch at /main/ エラーが表示されます。

4

2 に答える 2

2

取ろうとしているアプローチがうまくいかないことを認識する必要があります。テンプレート タグが行うことurlは、単純な文字列 (特定のリソースの URL) を生成することだけです。したがって、タグの結果は「/post」、「/post/24」などの文字列になる可能性があります。それだけです。この関数は、URL 文字列を生成する以外には何もしません。単純な Web URL に複雑な Python オブジェクトのリストを配置する場所はありません。

Web は、最も基本的なレベルでステートレスであることも認識する必要があります。各リクエストは完全に分離されているため、リクエスト間で Python オブジェクトを渡すことはできません。セッションを使用してリクエスト間で状態を維持することをシミュレートできますが、これはこの特定のケースでは適切なツールではないと思います。

代わりにすべきことは、リストごとに一意の識別子を持ち、その識別子を URL に渡すことです (リスト全体を URL に渡すのとは対照的です)。次に、ビューで識別子を使用してリストを再度取得し、結果を表示します。

于 2013-10-26T11:06:02.130 に答える
0

テンプレートの url タグと同じように、urls.py を絶対文字列として指定する必要があります。メインは次のようになります。

('^main/$', 'mysite.views.main'),

パターンへのパスを上部で定義することもできます。

urlpatterns = patterns('mysite.views',
    ('^main/$', 'main'),
    … etc

ただし、文字列として参照する必要があることに注意してください

于 2013-10-26T10:15:02.410 に答える