كيفية الوصول إلى ملف تعريف المستخدم في جانغو القالب ؟

StackOverflow https://stackoverflow.com/questions/422140

  •  05-07-2019
  •  | 
  •  

سؤال

أنا تخزين إضافية لكل مستخدم المعلومات باستخدام AUTH_PROFILE_MODULE.

يمكننا الوصول إلى المستخدم في جانغو قالب باستخدام {{ request.user }} ولكن كيف يمكننا الوصول إلى الحقول في الملف الشخصي منذ الشخصي فقط يمكن الوصول إليه من خلال وظيفة user.get_profile() ?

هل هو حقا المطلوبة صراحة تمرير الملف إلى قالب في كل مرة ؟

هل كانت مفيدة؟

المحلول

استخدم {{ request.user.get_profile.whatever }}. اللغة النموذجيه جانغو تدعو الأشياء التي هي للاستدعاء تلقائيا - في هذه الحالة، وطريقة .get_profile()

نصائح أخرى

ولست متأكدا لماذا الأمر مختلف بالنسبة لي، ولكن أنا بحاجة إلى استخدام {{مستخدم}} بدلا من {{request.user}}.

نعم من الممكن الوصول إلى الملف الشخصي من القالب باستخدام طلب.المستخدم.get_profile

ومع ذلك هناك هو صغير التحذير:ليس كل المستخدمين سوف يكون التشكيلات التي كانت في حالتي مع المشرف المستخدمين.لذلك يدعو مباشرة {{ request.user.get_profile.whatever }} من القالب سوف يسبب خطأ في مثل هذه الحالات.

إذا كنت متأكدا من أن جميع المستخدمين دائما لمحات أنها آمنة للاتصال من القالب ، وإلا الدعوة get_profile() من خلال محاولة باستثناء كتلة في عرض ونقله إلى القالب.

إذا كنت تستخدم جانغو> 1.5 يمكنك لم تعد تستخدم get_profile.

إذا كان لديك التطبيق تراث، يجب إزالة AUTH_PROFILE_MODULE = 'myapp.profile' من settings.py الخاص بك.

إذا كنت تستخدم models.OneToOneField(User) في الملف الشخصي الخاص بك الطبقة، يمكنك ببساطة استخدام

{{ request.user.profile.whatever }}

وفي قالب جانغو بك

إذا كان ذلك يساعد أي شخص, أنا استخدم ما يلي في القالب:

اسم المستخدم: {{ user.username }}

المستخدم الاسم الكامل: {{ user.get_full_name }}

مجموعة المستخدم: {{ user.groups.all.0 }}

البريد الإلكتروني: {{ user.email }}

بدأت الدورة في: {{ user.last_login }}

عينة النتيجة هكذا:

المستخدم:المراجع إزيو

مجموعة المستخدم:auditGroup

اسم المستخدم:testUser03

البريد الإلكتروني:testuser03@auditor.com

الدورة بدأت في 16 أبريل / نيسان عام 2018 ، 9:38 مساء

شكرا :)

والعمل!

في نموذج ملفك الشخصي توفير related_name

user = models.OneToOneField(AUTH_USER_MODEL, related_name="user_profile", on_delete=models.CASCADE)

وبعد ذلك في استخدام القالب. هنا COMPANY_NAME هو حقل في الجدول الشخصية

{{ request.user.user_profile.company_name }}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top