1

私は Django を初めて使用し、最初の登録ページを django-registration でセットアップしたところ、すべてうまく機能しました (ユーザーは登録、パスワードの変更などを行うことができます)。ここで、アプリを少し拡張したいので、シンプルなプロファイル ページを追加して、ユーザーがログインしたときに自分のプロファイルを表示できるようにしたいと考えました。そこで、基本テンプレートを拡張するための profile_page.html テンプレートを作成し、ビューで非常に単純なビューを設定しました。

@login_required
def profile_info_view(request, template_name='profile/profile_page.html'):
    user_profile = request.user.username
    return render_to_response(template_name,{ "user":user_profile })

私の基本テンプレートは次のようになります。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
    <link rel="stylesheet" href="{{ STATIC_URL }}css/style.css" />
    <link rel="stylesheet" href="{{ STATIC_URL }}css/reset.css" />
    {% block extra_head_base %}
    {% endblock %}
    <title>{% block title %}User test{% endblock %}</title>
</head>

<body>
    <div id="header">
        {% block header %}
    {% if user.is_authenticated %}
    {{ user.username }} |
    <a href="{% url auth_password_change %}">{% trans "Profile" %}</a> | 
    <a href="{% url index %}">{% trans "Home" %}</a> | 
    <a href="{% url auth_logout %}">{% trans "Log out" %}</a>
    {% else %}
    <a href="{% url auth_login %}">{% trans "Log in" %}</a> | <a href="{% url registration_register %}">{% trans "Sign up" %}</a>
    {% endif %}
        {% endblock %}
    </div>

    <div id="content">
        {% block content %}{% endblock %}
    </div>

</body>

</html>

profile_pages.html テンプレートは次のとおりです。

{% extends "base.html" %}
{% load i18n %}

{% block content %}
Hi, {{ user }}
{% endblock %}

および url.py:

urlpatterns = patterns('',
    (r'^accounts/', include('registration.urls')),
    (r'^profile/', profile_info_view),                     
    (r'^$', direct_to_template,{ 'template': 'index.html' }, 'index'),
)

urlpatterns += staticfiles_urlpatterns()

そのため、ログインしたユーザーがプロファイル ページ (example.com/profile/) にアクセスすると、プロファイル ページと、ユーザーがログインしていない場合はログイン ページが表示されるようにしたいと考えています。

しかし、ログインしたユーザーが /profile にアクセスすると、ユーザーが登録されていないかのように基本テンプレートが評価されます (ヘッダーにログインが表示されます) が、プロファイルの結果は表示されます。さらに、静的ファイルも同様に機能しませんか?

なぜこれが起こっているのかについての手がかりはありますか?

ps テンプレートディレクトリを settings.py に含めました

助けてくれてありがとう!

4

1 に答える 1

1

dm03514 がコメントで述べているようuserに、実際のユーザー オブジェクトではなく、ユーザー名 (文字列) を変数としてテンプレートに渡しています。ユーザー名文字列には method がないis_authenticatedため、チェックは False を返します。

実際、ユーザーをテンプレート コンテキストに渡すべきではありません。代わりに、コンテキスト プロセッサを使用して、ユーザーを含むさまざまなアイテムをコンテキストに追加するRequestContextを使用します。

return render_to_response(template_name, {}, context_instance=RequestContext(request))
于 2011-09-30T13:58:57.063 に答える