Tengo una vista personalizada basada en clases
# 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)
Quiero pasar el parámetro slug (u otros parámetros a la vista) como este
MyView.as_view(slug='hello_world')
¿Necesito anular algún método para poder hacer esto?
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')
Cada parámetro que se pasa al
as_view
método es una variable de instancia de la clase View. Eso significa que para agregarslug
como parámetro, debe crearlo como una variable de instancia en su subclase:Eso debería
MyView.as_view(slug='hello_world')
funcionar.Si está pasando las variables a través de palabras clave, use lo que sugirió el Sr. Erikkson: https://stackoverflow.com/a/11494666/9903
fuente
import *
. Editó su publicación.Vale la pena señalar que no necesita anular
get_object()
para buscar un objeto basado en un slug pasado como una palabra clave arg; puede usar los atributos de unSingleObjectMixin
https://docs.djangoproject.com/en/1.5/ref/ vistas basadas en clases / mixins-single-object / # singleobjectmixin(ambos
slug_field
yslug_url_kwarg
predeterminado a'slug'
)fuente
Si desea agregar un objeto al contexto de la plantilla, puede anularlo
get_context_data
y agregarlo a su contexto. La solicitud también es parte de uno mismo en caso de que necesite request.user .fuente
MyObject
?Puede pasar parámetros desde urls.py https://docs.djangoproject.com/en/1.7/topics/http/urls/#passing-extra-options-to-view-functions
Esto también funciona para vistas genéricas. Ejemplo:
En este caso, los parámetros pasados a la vista no deben ser necesariamente variables de instancia de la clase Vista. Con este método, no necesita codificar el nombre de la página predeterminada en el modelo YourView, pero puede pasarlo como un parámetro de urlconf.
fuente
Según lo indicado por Yaroslav Nikitenko , si usted no desea codificar una nueva variable de instancia de la clase View, puede pasar opciones adicionales para ver las funciones de
urls.py
la siguiente manera:Solo quería agregar cómo usarlo desde la vista. Puede implementar uno de los siguientes métodos:
fuente
DetailView
clase. ¿Podrías explicar cómo se usa allí?Para django 3.0, esto es lo que funcionó para mí:
fuente