1

私は自分自身にDjangoを教えています。既存のユーザーが自分の「もの」をリストしたページを取得し、新しいユーザーが自分の「もの」を通知するページを取得するようにテストを試みています。システムに存在せず、ユーザーのリストを生成できます。問題は、既存のユーザー辞書にないユーザーに対してKeyErrorsが発生し続けることです(ユーザーが辞書に含まれている場合は正常に機能します)。問題がviews.pyで関連する関数を構造化した方法にあるのか、templateTagsを使用している方法にあるのか、または何なのかわかりません。Djangoのエラーページは私のviews.pyページのコンテキスト行を指していますが、それが実際に問題であるかどうかはわかりません。

どんな助けでも大歓迎です。

私のコード:

views.py:

def hiUser(request,uname):
    t = get_template("samplate1.html")
    ds,ti = getTime()
    user_stuff = {"sam":["a","b","c"],"kathy":["foo","bar"],"rob":[]}
    c = Context({"date":ds,"time":ti,"user":uname,"user_stuff":user_stuff[uname],"users":user_stuff.keys()})
    return HttpResponse(t.render(c))

samplate1.html:

<html>
{% ifequal user "list" %}
<head><title>List of Users</title></head>
<body><h1>List of users</h1>
<ul>
{% for user in users %}
    <li>{{ user }}</li>
{% empty %}
    <p>No users listed!</p>
{% endfor %}
</ul>
{% endifequal %}
{% if user in users %}
<head><title>Greetings, {{ user }}</title></head>
<body>
<h1>Hello</h1>
<p>Greetings, {{ user }}</p>
<p>The date is {{ date }}</p>
<p>The time is {{ time }}</p>
<p>Here is a list of your stuff:</p>
<ul>
    {% for item in user_stuff %}
        <li>{{ item }}</li>
    {% empty %}
        <p>You don't have any stuff!</p>    
    {% endfor %}
    </ul>
{% else %}
<head><title>You're new here, huh?</title></head>
<body>
<h1>Hello</h1>
<p>Your username is not in our database.</p>
<p>You should probably fix that.</p>
{% endif %}

そして最後に:

urls.py:

...
urlpatterns = ('',
   (r'^user/name/(.*)/$',hiUser),
)
4

2 に答える 2

1

問題はあなたにありますviews.py-この部分、具体的には:

c = Context({"date":ds,"time":ti,"user":uname,"user_stuff":user_stuff[uname],"users":user_stuff.keys()})

これを解決するには、ユーザーがにいない場合に何をするかを理解する必要がありますuser_stuff。404を上げるつもりですか?エラーを表示しますか?ダミーコンテンツを記入しますか?

404を上げたい場合は、次のように行うことができます。

from django.http import Http404

def hiUser(request,uname):
    t = get_template("samplate1.html")
    ds,ti = getTime()
    user_stuff = {"sam":["a","b","c"],"kathy":["foo","bar"],"rob":[]}

    if uname not in user_stuff:
        raise Http404

    c = Context({"date":ds,"time":ti,"user":uname,"user_stuff":user_stuff[uname],"users":user_stuff.keys()})
    return HttpResponse(t.render(c))

ダミーコンテンツを入力する場合は、次のようにdict.getを使用できます。

def hiUser(request,uname):
    t = get_template("samplate1.html")
    ds,ti = getTime()
    user_stuff = {"sam":["a","b","c"],"kathy":["foo","bar"],"rob":[]}

    stuff_for_user = user_stuff.get(uaname, [])
    c = Context({"date":ds,"time":ti,"user":uname,"user_stuff":stuff_for_user,"users":user_stuff.keys()})

    return HttpResponse(t.render(c))

エラーページを表示する場合は、404を発生させるコードサンプルを変更する必要があります。

于 2012-08-03T21:34:32.830 に答える
1

user_stuff[uname]使用する代わりにuser_stuff.get(uname)unameキーが存在しない場合、値はになりますNone。またはuser_stuff.get(uname, [])、を使用することもできます。これにより、存在しない場合は空のリストになります。

于 2012-08-03T21:36:19.973 に答える