سؤال

أنا أستخدم تسجيل Django ، وأعمله فقط.

{{user.is_authenticated }}

صحيح ، على الرغم من أنني ذهبت بالفعل إلى/حسابات/تسجيل الدخول/وقمت بتسجيل المستخدم.

{{user.is_anonymous }} 

يعود صحيح أيضا. وفقًا لمستندات Django ، يجب أن يكون هذان الشخصان مختلفان:

is_anonymous: دائما يعود خطأ. هذه طريقة لتمييز كائنات المستخدم والكائنات المجهولة. بشكل عام ، يجب أن تفضل استخدام is_authenticated () على هذه الطريقة.

و

is_authenticated: دائما يعود صحيح. هذه طريقة لمعرفة ما إذا كان قد تمت المصادقة على المستخدم. هذا لا يعني أي أذونات ، ولا يتحقق مما إذا كان المستخدم نشطًا - فهو يشير فقط إلى أن المستخدم قد قدم اسم مستخدم وكلمة مرور صالحة.

أنا أستخدم طرق العرض القياسية التي تأتي مع تسجيل Django ولم أتطرق إليها بعد. في Tempalate لدي الرمز التالي:

{% if user.is_authenticated %}
{% user }}
{% if user.is_anonymous %}
    is anonymous
{% endif $}
{% else %}
    gotta login
{% endif %}

أين ستكون المشكلة؟ سأكون ممتنًا حقًا!

تحديث: لقد لاحظت أنه على الصفحة الرئيسية ، فإن كلاهما is_authenticated و id_anonymous return صحيح ، بينما إذا ذهبت إلى /حسابات /تسجيل الدخول قبل تسجيل الدخول ، فإن إرجاع is_anonymous فقط كما ينبغي. وأيضًا ، على الصفحة الرئيسية ، لدي العرض التالي إذا كان ذلك يساعد:

def home(request):
    return render_jinja(request, 'index.html', blah = 'ga')

تحديث 2: print (request.user.is_authenticated ()) يعطي خطأ. ثم لدي:

return render_jinja(request, 'index.html', blah = 'ga')

وفي القالب ، يعود user.is_authenticated false.

تحديث 3: إذا كنت أستخدم Render_to_response ، بدلاً من Render_jinja ، كل شيء جيد. ما زلت لا تعرف كيفية إصلاح هذا على الرغم من :(

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

المحلول

يبدو أنك تحاول اكتشاف شيئين في وقت واحد ؛ ما هي الطريقة الصحيحة لاستخدام قوالب Jinja وما هي الصفقة مع المستخدم/المجهول. ربما تحاول معرفة هذه المشكلات واحدة تلو الأخرى.

ليس لدي أي خبرة مع Jinja ولكن قد ترغب في التحقق والتأكد من أنك تأخذ الاختلافات بين بناء جملة قالب جينجا وجانغو داخل الحساب. الفرق الأكبر الذي أعرفه هو أن مكالمة الطريقة تتطلب قوسين صريحين. لذا فإن مكالمات is_authenticated و is_anonymous في مثالك تحتاج إلى أقواس.

Jinja style {{ user.is_authenticated() }}
Django style {{ user.is_authenticated }} 

إذا لم يحل هذا المشكلة ، فحاول التثبيت Django-Debug-Toolbar وألقي نظرة على سياق القالب الخاص بك. تحقق ومعرفة ما إذا كان user لا شيء أو كائن (مستخدم أو مجهول).

يمكنك أيضا القراءة على مستخدم مجهول وانظر مثالا على التحقق من مستخدم مصادق عليه في المستندات. باختصار ، بالنسبة لكائن مجهول IS_ANONDAND () يعيد دائمًا صحيحًا بدلاً من خطأ و is_authenticated () يعيد دائمًا خطأ بدلاً من صحيح.

نصائح أخرى

صفع على الرأس. قرأت في مكان ما:

إذا كان user.is_authenticated: ....# صحيح دائمًا ، لأنه طريقة!

وهكذا ، بدلاً من وجود {{user.is_authenticated}} في القالب ، يجب أن يكون {{user.is_authenticated ()}}

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top