-1

これは非常に単純な問題ですが、私には理解できません。

行をフェッチしてから render_to_response を呼び出すビューがあります。ただし、データベースに由来しないテンプレートに表示する他のものを追加したいと思います。私はそれを行う方法を理解できず、この状況をカバーするドキュメントには何も見つかりません。

データベースフェッチの結果を渡すだけで、すべてが正常に機能します-フォームがレンダリングされます。他のものを導入するとすぐに、500 を取得するか (以下の例のように)、完全に無視されます。

(以下に示す例で私が取り組んでいるものは、django チュートリアルの「投票」アプリの一種の突然変異であるため、命名の一部が少し奇妙に思われる場合はお詫びします)

見る

BookMark オブジェクトと同様に、いくつかの任意のデータを追加します。この例では、文字列 'test title' です。

def detail(request, bookmark_id):
    try:
        b = BookMark.objects.get(pk=bookmark_id)
        d = {'title' = 'test title'}
    except Poll.DoesNotExist:
        raise Http404
    return render_to_response(  'bookmarks/bookmark_detail.html',
            {'bookmark': b, 'title': d},
                                context_instance=RequestContext(request))

ベーステンプレート

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>{% block title %}Default Title from base.html{% endblock %}</title>
    </head>
    <body>
        <div id="topstuff">
            <h1>This is top stuff</h1>
        </div>
        <div id="content">
            {% block content %}{% endblock %}
        </div>
        <div id="bottomstuff">
            <h1>This is bottom stuff</h1>
        </div>
    </body>
</html>

内部テンプレート

{% extends "base.html" %}

{{ bookmark }}


{% block title %}{{ title.title }}{% endblock title %}

{% block content %}

    <h1>{{ poll.question }}</h1>

    {% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}

    <form action="/polls/{{ poll.id }}/vote/" method="post">
        {% csrf_token %}
        <table>
            <tr>
                <td>URL:</td>
                <td><input type="text" name="url" id="url" value="{{ bookmark.url }}" /></td>
            </tr>
            <tr>
                <td>TITLE:</td>
                <td><input type="text" name="title" id="title" value="{{ bookmark.title }}" /></td>
            </tr>
            <tr>
                <td>NOTES:</td>
                <td><input type="text" name="notes" id="notes" value="{{ bookmark.notes }}" /></td>
            </tr>
        </table>
        <input type="submit" value="Submit" />
    </form>

{% endblock content%}

編集: コメントで指摘されたように、私はそこにタイプミスがあったので、将来の検索者のために、次の2つのアプローチのいずれかが機能します:

オプション 1 次のように render_to_response に渡されるディクショナリに値を直接埋め込みます

return render_to_response(  'bookmarks/bookmark_detail.html',
        {'bookmark': b, 'title':'test title1'},
    context_instance=RequestContext(request))

次のように、テンプレート内でその値を参照します。

{% block title %}{{ title }}{% endblock title %}

オプション 2 他の値を保持するコンテナ ディクショナリを作成し、次のように render_to_response に渡されるディクショナリにそれを埋め込みます

d = {'title':'test title 2'}
return render_to_response(  'bookmarks/bookmark_detail.html',
        {'bookmark': b, 'title':d},
    context_instance=RequestContext(request))

次のように、テンプレート内でその値を参照します。

{% block title %}{{ title.title }}{% endblock title %}
4

1 に答える 1

1

コメントで指摘されているように、私はそこにタイプミスがあったので、将来の検索者のために、次の2つのアプローチのいずれかが機能します:

オプション 1 次のように render_to_response に渡されるディクショナリに値を直接埋め込みます

return render_to_response(  'bookmarks/bookmark_detail.html',
        {'bookmark': b, 'title':'test title1'},
    context_instance=RequestContext(request))

次のように、テンプレート内でその値を参照します。

{% block title %}{{ title }}{% endblock title %}

オプション 2 他の値を保持するコンテナ ディクショナリを作成し、次のように render_to_response に渡されるディクショナリにそれを埋め込みます

d = {'title':'test title 2'}
return render_to_response(  'bookmarks/bookmark_detail.html',
        {'bookmark': b, 'title':d},
    context_instance=RequestContext(request))

次のように、テンプレート内でその値を参照します。

{% block title %}{{ title.title }}{% endblock title %}
于 2013-03-22T09:08:29.427 に答える