Saya memiliki tampilan berbasis kelas kustom
# myapp/views.py
from django.views.generic import *
class MyView(DetailView):
template_name = 'detail.html'
model = MyModel
def get_object(self, queryset=None):
return queryset.get(slug=self.slug)
Saya ingin meneruskan parameter slug (atau parameter lain ke tampilan) seperti ini
MyView.as_view(slug='hello_world')
Apakah saya perlu mengganti metode apa pun untuk dapat melakukan ini?
self.kwargs.get('slug', None)
class View: def as_view(cls, **initkwargs): def view(request, *args, **kwargs):
url('<slug:slug>', MyView.as_view(), name='my_named_view')
Setiap parameter yang diteruskan ke
as_view
metode adalah variabel instance dari kelas View. Itu berarti untuk menambahkanslug
sebagai parameter Anda harus membuatnya sebagai variabel instan di sub-kelas Anda:Itu seharusnya
MyView.as_view(slug='hello_world')
berhasil.Jika Anda meneruskan variabel melalui kata kunci, gunakan saran Tn. Erikkson: https://stackoverflow.com/a/11494666/9903
sumber
import *
. Mengedit postingan Anda.Perlu dicatat bahwa Anda tidak perlu menimpa
get_object()
untuk mencari objek berdasarkan slug yang diteruskan sebagai argumen kata kunci - Anda dapat menggunakan atribut dariSingleObjectMixin
https://docs.djangoproject.com/en/1.5/ref/ class-based-views / mixins-single-object / # singleobjectmixin(keduanya
slug_field
danslug_url_kwarg
default'slug'
)sumber
Jika Anda ingin menambahkan objek ke konteks untuk template, Anda dapat mengganti
get_context_data
dan menambahkan ke konteksnya. Permintaan juga merupakan bagian dari diri jika Anda membutuhkan request.user .sumber
MyObject
?Anda dapat meneruskan parameter dari urls.py https://docs.djangoproject.com/en/1.7/topics/http/urls/#passing-extra-options-to-view-functions
Ini juga berfungsi untuk tampilan umum. Contoh:
Dalam hal ini, parameter yang diteruskan ke tampilan tidak harus berupa variabel instance dari kelas View. Dengan menggunakan metode ini, Anda tidak perlu melakukan hardcode nama halaman default ke dalam model YourView, tetapi Anda bisa meneruskannya sebagai parameter dari urlconf.
sumber
Seperti yang dinyatakan oleh Yaroslav Nikitenko , jika Anda tidak ingin hardcode variabel contoh baru untuk kelas View, Anda dapat melewati opsi tambahan untuk melihat fungsi dari
urls.py
seperti ini:Saya hanya ingin menambahkan cara menggunakannya dari tampilan. Anda dapat menerapkan salah satu metode berikut:
sumber
DetailView
kelas. Bisakah Anda menjelaskan cara menggunakannya di sana?Untuk django 3.0, inilah yang berhasil untuk saya:
sumber