0

次のコードを使用して、データをテンプレート ファイルにレンダリングしようとしています。私が遭遇したエラーは次のようなものです:

This page contains the following errors:
error on line 13 at column 16: AttValue: " or ' expected

Below is a rendering of the page up to the first error.
Name,Author,Status

コード

def editbook(request):
    if request.method == 'GET':
        name = request.GET.get('name',False)
        Details = bookInfo.objects.all().filter(Name=name)
        id = Details.values_list('id',flat=True)
        Name = Details.values_list('Name',flat=True)
        Author = Details.values_list('Author',flat=True)
        Status = Details.values_list('Status',flat=True)
        return render(request, 'app/add.html', {'Name' : Name, 'Author' : Author, 'Status' : Status}, content_type="application/xhtml+xml")

テンプレートコード

<html>
<head>
    <title>Add</title>
</head>
<body>
    <form action="add/" method="post">
        {% csrf_token %}
        <p style="font-family:Courier New;color:teal">Name <input type="text" placeholder="Name of the book" name="name"></input></p>

        <p style="font-family:Courier New;color:teal">Author <input type="text" placeholder="Author of the book" name="author"></input></p>
        <p style="font-family:Courier New; color:teal"> Status
        <select name="status">
                <option value=1>Read</option>
                <option value=1>Unread</option>
        </select>
        </p>
        <input type="submit" id="booksubmit" value="Add/Edit Book"></input>
</form>
</body>
</html>

Google で検索したところ、XML 解析エラーのようなものであることがわかりました (間違っている場合は修正してください)。今、私はこの位置で立ち往生しています。助けてください。

EDITここで本を追加するためのフォームには、フィールドデータをデータベースに保存するための別の方法があります。

4

2 に答える 2

2

あなたの HTML は、html と html5 のタイプが何であれ、形式が正しくありません。

また、念のため、Python コードもリファクタリングする必要があります。

通常、大文字ではなく小文字で変数を定義するので、

変数Details, Name, Author, Statusは である必要がありますdetails, name, author, status。さらに、あなたのクラス名はbookInfoそのように綴られていますか? Python のクラスは大文字で始まるbookInfo必要があるため、 BookInfo.

適切な HTML5 は次のとおりです。

<html>
<head>
    <title>Add</title>
</head>
    <body>
        <form action="add/" method="post">
        {% csrf_token %}
        <p style="font-family:Courier New;color:teal;">Name <input type="text" placeholder="Name of the book" name="name" /></p>

        <p style="font-family:Courier New;color:teal;">Author <input type="text" placeholder="Author of the book" name="author" /></p>
        <p style="font-family:Courier New; color:teal;"> Status
            <select name="status">
                <option value=1>Read</option>
                <option value=1>Unread</option>
            </select>
            </p>
            <input type="submit" id="booksubmit" value="Add/Edit Book" />
        </form>
    </body>
</html>

HTML5 を使用しておらず、定義した Doctype に依存する場合。入力フィールドでプレースホルダーを使用することはできません。

/>入力はではなく で閉じる必要があり</input>ます。

HTML で指定したインライン スタイルは不完全です:

style="font-family:Courier New; color:teal"

する必要があります

style="font-family:Courier New; color:teal;"

使用しているリターンは必要ありませんcontent_type。ドロップできます。テンプレート変数をどこでも使用していないので、そうではありませんが、テンプレート言語の構文は {{ variable_name }} であり、あなたの場合は (リファクタリングするまで) {{ Name }}, {{ Status }}たとえば。

content_typeまた、ブラウザにドキュメントを解析するように積極的に指示しているため、このエラーが表示されxhtml+xmlます。これは、事実上違反しているルール付きの XHTML です。

Django アプリから入力フィールドに値を追加するには、これを行います (Django フォームなし)。

<input type="text" value="{{ Name }}" />

ただし、代わりに Django Form を使用することをお勧めします。

于 2013-03-07T07:24:53.783 に答える
0

テンプレートが「整形式」ではないため、このエラーが発生していると思います。私の推測では、出力されているxmlにエラーがあると思います。

http 応答のコンテンツ タイプを と宣言しましたapplication/xhtml+xml。xhtml では、すべての属性を引用符で囲む必要があります。おそらく、どこかに引用符がない/追加されている可能性があります。あなたのテンプレートからそれがどこにあるかわかりません。

テンプレート変数 ( {{ Name }}{{ Author }}および{{ Status }}) が出力しているものをチェックして、引用符が追加されていないかどうかを確認するか、コンテンツ タイプを変更してみてください (おそらく、render関数に渡す content_type パラメーターをドロップするだけです)。

于 2013-03-07T06:59:06.037 に答える