Mam niestandardowy widok oparty na klasach
# 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)
Chcę przekazać parametr slug (lub inne parametry do widoku) w ten sposób
MyView.as_view(slug='hello_world')
Czy muszę zastąpić jakieś metody, aby to zrobić?
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')
Każdy parametr przekazany do
as_view
metody jest zmienną wystąpienia klasy View. Oznacza to, że aby dodaćslug
jako parametr, musisz utworzyć go jako zmienną instancji w swojej podklasie:To powinno
MyView.as_view(slug='hello_world')
działać.Jeśli przepuszczasz zmienne przez słowa kluczowe, użyj tego, co zasugerował pan Erikkson: https://stackoverflow.com/a/11494666/9903
źródło
import *
. Edytował Twój post.Warto zauważyć, że nie trzeba nadpisywać
get_object()
, aby wyszukać obiekt na podstawie slugu przekazanego jako słowo kluczowe arg - możesz użyć atrybutówSingleObjectMixin
https://docs.djangoproject.com/en/1.5/ref/ widoki oparte na klasach / mixins-single-object / # singleobjectmixin(oba
slug_field
islug_url_kwarg
domyślnie'slug'
)źródło
Jeśli chcesz dodać obiekt do kontekstu szablonu, możesz nadpisać
get_context_data
i dodać do jego kontekstu. Żądanie jest również częścią siebie na wypadek, gdybyś potrzebował request.user .źródło
MyObject
?Możesz przekazać parametry z urls.py https://docs.djangoproject.com/en/1.7/topics/http/urls/#passing-extra-options-to-view-functions
Działa to również w przypadku widoków ogólnych. Przykład:
W takim przypadku parametry przekazywane do widoku nie muszą być koniecznie zmiennymi instancji klasy View. Korzystając z tej metody, nie musisz zakodować na stałe domyślnej nazwy strony w modelu YourView, ale możesz po prostu przekazać ją jako parametr z urlconf.
źródło
Jak stwierdził Jarosław Nikitenko , jeśli nie chcesz zakodować na stałe nowej zmiennej instancji w klasie View, możesz przekazać dodatkowe opcje, aby wyświetlić funkcje z
urls.py
takich sposobów :Chciałem tylko dodać, jak go używać z widoku. Możesz zaimplementować jedną z następujących metod:
źródło
DetailView
klasa. Czy mógłbyś wyjaśnić, jak go tam używać?W przypadku django 3.0 zadziałało to:
źródło