জ্যাঙ্গো টেমপ্লেটে কীভাবে ব্যবহারকারীর প্রোফাইল অ্যাক্সেস করবেন?


89

আমি ব্যবহারকারী ব্যবহার করে কিছু অতিরিক্ত তথ্য সঞ্চয় করছি AUTH_PROFILE_MODULE

আমরা ব্যবহার করে একটি জাঙ্গো টেমপ্লেটে ব্যবহারকারীর অ্যাক্সেস করতে {{ request.user }}পারি তবে প্রোফাইলটি কেবল কোনও ফাংশনের মাধ্যমে অ্যাক্সেসযোগ্য হওয়ায় আমরা কীভাবে প্রোফাইলে ক্ষেত্রগুলি অ্যাক্সেস করব user.get_profile()?

প্রতিবারই কি টেম্পলেটটিতে স্পষ্টভাবে প্রোফাইলটি প্রেরণ করা দরকার?

উত্তর:


136

ব্যবহার {{ request.user.get_profile.whatever }}। জাঙ্গোর টেম্পলটিং ভাষা স্বয়ংক্রিয়ভাবে কলযোগ্য জিনিসগুলিকে কল করে - এই ক্ষেত্রে .get_profile()পদ্ধতিটি।



4
এটি জ্যাঙ্গো 1.5 এবং উচ্চতর অবধি অনুসরণ করা হয় এবং জ্যাঙ্গো 1.7 এবং তত উপরে কাজ করে না। আধুনিক জাঙ্গোতে এটি কীভাবে করা যায় তার জন্য সাচ্চা রাউয়ের উত্তর দেখুন।
মিচিয়েলবি

27

এটি আমার পক্ষে কেন আলাদা তা নিশ্চিত নয় তবে আমার। {অনুরোধ.user}} এর চেয়ে I {ব্যবহারকারী} use ব্যবহার করা দরকার}


4
দস্তাবেজগুলি বলছে ( ডকস.ডজ্যাঙ্গোপ্রজেক্ট / এন / দেব / টপিক্স / অউথ / )) আপনি যেভাবে বলছেন তেমনভাবে আপনি {{ব্যবহারকারী} by দ্বারা ব্যবহারকারীকে অ্যাক্সেস করতে পারবেন।
শাওনিং চিয়ামিভ

4
আপনি অনুরোধের জন্য টেমপ্লেট প্রসঙ্গ প্রসেসর অন্তর্ভুক্ত না করার কারণে {{ব্যবহারকারী}} এবং {{অনুরোধ.উসার} not না ব্যবহারের আসল কারণ। https://docs.djangoproject.com/en/dev/ref/templates/api/#django-core-context-processors-request
নাইটজেরো

4
লিঙ্কটি জ্যাঙ্গো ১.১০ এর জন্য কিছুটা আলাদা তবে ধারণাটি একই, টেমপ্লেটে django.template.context_processors.requestসন্নিবেশ করানো হয় request, তবে প্রসঙ্গে django.contrib.auth.context_processors.authসন্নিবেশ করানো userহয়। docs.djangoproject.com/en/1.10/ref/templates/api/…
আন্দ্রে-নিকুলি পেট্রে

8

হ্যাঁ, অনুরোধ.user.get_profile ব্যবহার করে টেমপ্লেট থেকে প্রোফাইল অ্যাক্সেস করা সম্ভব

তবে একটি ছোট ক্যাভিয়েট রয়েছে : সমস্ত ব্যবহারকারীর প্রোফাইল থাকবে না, যা অ্যাডমিন ব্যবহারকারীদের ক্ষেত্রে আমার ক্ষেত্রে ছিল। সুতরাং {{ request.user.get_profile.whatever }}টেমপ্লেট থেকে সরাসরি কল করা যেমন ক্ষেত্রে ত্রুটি ঘটায়।

আপনি যদি নিশ্চিত হন যে আপনার সমস্ত ব্যবহারকারীর কাছে সর্বদা প্রোফাইল থাকে তবে এটি টেমপ্লেট থেকে কল করা নিরাপদ, অন্যথায় get_profile()আপনার দৃষ্টিতে ব্লক চেষ্টা করেই ফোন করুন এবং এটি টেমপ্লেটে পাস করুন।


এই উত্তরটি বিভ্রান্তিমূলক - আমি পরীক্ষা করিনি {{ request.user.get_profile.whatever }}, তবে {{ request.user.get_profile }}কাজ করব এবং বর্তমান সংস্করণে কোনও প্রোফাইল উপস্থিত রয়েছে কি না তা পরীক্ষা করতে ব্যবহার করা যেতে পারে। ডকস.ডজ্যাঙ্গোপ্রজেক্ট . com/en/dev/ref/templates/api/ … দেখুন । একটি নোট রয়েছে যে এটি বিকাশের সংস্করণে পরিবর্তিত হবে, তবে আমি যেটির সাথে লিঙ্ক করেছি তার উপরের অনুচ্ছেদটি দেখুন।
ralokt

@ টকোলার, এখানে ঠিক কী বিভ্রান্ত হচ্ছে? যদি ব্যবহারকারীর কোনও প্রোফাইল না থাকে এবং আপনি get_profile কল করছেন ome এমন কিছু যা ত্রুটির কারণ হবে।
সের্গেই গোলভোচেনকো

4

আপনি যদি জ্যাঙ্গো> 1.5 ব্যবহার করেন তবে আপনি আর ব্যবহার করতে পারবেন না get_profile

আপনার যদি কোনও লিগ্যাসি অ্যাপ থাকে তবে AUTH_PROFILE_MODULE = 'myapp.profile'আপনার নিজের থেকে সরিয়ে নেওয়া উচিত settings.py

আপনি যদি models.OneToOneField(User)আপনার প্রোফাইল শ্রেণিতে ব্যবহার করেন তবে আপনি কেবল ব্যবহার করতে পারেন

{{ request.user.profile.whatever }}

আপনার জ্যাঙ্গো টেমপ্লেটে


4
@ অ্যালেক্সস্টোয়ার্ট আপনি কি বলতে চাইছেন আমাদের requestসামনে আর কিবোর্ডের দরকার নেই ?
লুক আরন

3

যদি এটি কাউকে সহায়তা করে তবে আমি আমার টেমপ্লেটে নিম্নলিখিতগুলি ব্যবহার করেছি:

ব্যবহারকারীর নাম: {{ user.username }}

ব্যবহারকারীর পুরো নাম: {{ user.get_full_name }}

ব্যবহারকারী দল: {{ user.groups.all.0 }}

ইমেল: {{ user.email }}

অধিবেশন শুরু: {{ user.last_login }}

একটি নমুনা ফলাফল এরকম:

ব্যবহারকারী: নিরীক্ষক ইজিও

ব্যবহারকারী গ্রুপ: নিরীক্ষা গোষ্ঠী

ব্যবহারকারীর নাম: testUser03

ইমেল: testuser03@auditor.com

অধিবেশনটি 16 এপ্রিল, 2018, রাত 9:38 এ শুরু হয়েছিল

ধন্যবাদ :)


1

কাজ!

আপনার প্রোফাইলের মডেলটিতে সম্পর্কিত_নাম সরবরাহ করুন

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

তারপরে টেমপ্লেট ব্যবহারে। এখানে কোম্পানির নামটি প্রোফাইল টেবিলে ক্ষেত্র

{{ request.user.user_profile.company_name }}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.