0

私はdjango-registrationとdjango-profilesでアプリを構築しています。ページのどこにでも、現在ログインしているユーザーのデータを表示するセクションがあり (名字や姓など、次のような構文を使用して: {{ user.first_name }})、正常に動作します。これは、HTML 構造と前述のセクションを使用して 1 つのメイン テンプレートを拡張するサブページ テンプレートで行われます。

ここで、セクションに (を使用して) ユーザー イメージを追加しようとしましたが、次のページを除くすべての場所{{ profile.image }}でテンプレート変数を使用できるという問題があります。{{ profile }}

settings.pyには次のものがあります。

AUTH_PROFILE_MODULE = 'intranet.UserProfile'

TEMPLATE_CONTEXT_PROCESSORS = (
   'django.core.context_processors.static',
)

に追加"django.contrib.auth.context_processors.auth",TEMPLATE_CONTEXT_PROCESSORSても何も変わりません。

models.pyの私の UserProfile クラスは次のとおりです。

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    image = models.ImageField(upload_to=user_image_name,
        blank=True, null=True, verbose_name='User photo')

urls.py :

(r'^profiles/edit/', 'profiles.views.edit_profile', {'form_class': ProfileForm, }),
(r'^profiles/', include('profiles.urls')),

そのため、残りはデフォルトでdjango-profiles urls.pyファイルに設定されています。

アプリケーションのテンプレートのどこでも (プロファイル ページだけでなく) テンプレート変数を使用 して、他のテンプレートによって拡張されたメイン テンプレートで使用できるようにしたいと考えています。{{ profile }}

これを入手する方法を教えてください。どんな助けでも大歓迎です。

バージョン 1.3.1 で Django、バージョン 0.7 で django-registration、バージョン 0.2 で django-profiles を使用しています。

4

3 に答える 3

5

欲しいと思いますuser.get_profile()

を使用RequestContextしていてauth、 のコンテキスト プロセッサ リストに含まれている場合は、目的の処理が実行されるかどうかをsettings.py試してください。{{user.get_profile.image}}

于 2012-04-29T22:00:51.363 に答える
1

userprofile アプリの models.py ファイルに次のようなものを入れることもできます

# Fetches the user profile if it exists, otherwise, it creates one User.get_or_create_profile = property(lambda u: Profile.objects.get_or_create(user=u)[0])

これにより、常にプロファイル オブジェクトが返されます。

于 2012-05-01T13:39:25.703 に答える
1

「Peter Rowell」による上記の回答は、次の理由により、この特定のケースでうまくいったに違いないと思います。

  1. ユーザー オブジェクトは、テンプレートの "django.contrib.auth.context_processors.auth" コンテキスト プロセッサで利用できます。
  2. django テンプレート コンテキストで利用可能な Python オブジェクトのすべてのメソッドを使用できるため、 User.get_profile() メソッドが利用可能です。

ただし、テンプレートに他のオブジェクト (たとえば、id=2 の Entry オブジェクト、または "django.contrib.auth.context_processors.auth" がない場合) が必要な場合は、辞書内の任意のオブジェクトをテンプレートから提供できます。次のようにあなたの見解

def view_needing_profile(request):
    c_user = request.user
    c_profile = c_user.get_profile()
    c_entry = Entry.objects.get(id=2)

    return render(request, 'template_using_profile_and_entry.html',
                           {'profile' : c_profile, 'entry' : c_entry } )                                    
于 2012-04-29T23:26:21.527 に答える