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


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.