Saya menyimpan beberapa informasi tambahan per pengguna menggunakan AUTH_PROFILE_MODULE
.
Kita dapat mengakses pengguna dalam templat Django dengan menggunakan {{ request.user }}
tetapi bagaimana kita mengakses bidang dalam profil karena profil hanya dapat diakses melalui fungsi user.get_profile()
?
Apakah benar-benar diwajibkan untuk secara eksplisit meneruskan profil ke template setiap saat?
python
django
django-templates
Swaroop CH
sumber
sumber
Tidak yakin mengapa ini berbeda untuk saya, tapi saya perlu menggunakan {{user}} daripada {{request.user}}.
sumber
django.template.context_processors.request
menyisipkanrequest
cetakan dalam, sedangkandjango.contrib.auth.context_processors.auth
menyisipkanuser
dalam konteks. docs.djangoproject.com/en/1.10/ref/templates/api/…Ya, dimungkinkan untuk mengakses profil dari template menggunakan request.user.get_profile
Namun ada peringatan kecil : tidak semua pengguna akan memiliki profil, seperti yang saya alami dengan pengguna admin. Jadi memanggil langsung
{{ request.user.get_profile.whatever }}
dari template akan menyebabkan kesalahan dalam kasus seperti itu.Jika Anda yakin semua pengguna Anda selalu memiliki profil, maka aman untuk menelepon dari template, jika tidak, panggil
get_profile()
dari dalam blok coba-kecuali dalam tampilan Anda dan teruskan ke template.sumber
{{ request.user.get_profile.whatever }}
, tetapi{{ request.user.get_profile }}
akan berfungsi dan dapat digunakan untuk memeriksa apakah profil ada atau tidak dalam versi saat ini. Lihat docs.djangoproject.com/en/dev/ref/templates/api/… . Ada catatan yang akan berubah dalam versi pengembangan, meskipun, lihat paragraf di atas yang saya tautkan.Jika Anda menggunakan Django> 1.5 Anda tidak dapat lagi menggunakan
get_profile
.Jika Anda memiliki aplikasi lawas, Anda harus menghapus
AUTH_PROFILE_MODULE = 'myapp.profile'
darisettings.py
.Jika Anda menggunakan
models.OneToOneField(User)
di kelas Profil Anda, Anda cukup menggunakandalam cetakan Django Anda
sumber
request
keyboard di depan?Jika itu membantu siapa pun, saya menggunakan yang berikut ini di template saya:
Nama pengguna:
{{ user.username }}
Nama lengkap pengguna:
{{ user.get_full_name }}
Grup pengguna:
{{ user.groups.all.0 }}
Surel:
{{ user.email }}
Sesi Dimulai pada:
{{ user.last_login }}
Hasil sampelnya seperti ini:
Terima kasih :)
sumber
Bekerja!
Dalam model profil Anda, berikan related_name
user = models.OneToOneField(AUTH_USER_MODEL, related_name="user_profile", on_delete=models.CASCADE)
Kemudian di gunakan template. Berikut nama_perusahaan adalah bidang di tabel profil
sumber