Eu tenho uma visão baseada em classe personalizada
# 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)
Eu quero passar o parâmetro slug (ou outros parâmetros para a visualização) assim
MyView.as_view(slug='hello_world')
Eu preciso substituir algum método para poder fazer isso?
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 é passado para o
as_view
método é uma variável de instância da classe View. Isso significa que, para adicionarslug
como parâmetro, você deve criá-lo como uma variável de instância em sua subclasse:Isso deve
MyView.as_view(slug='hello_world')
funcionar.Se você estiver passando as variáveis por meio de palavras-chave, use o que o Sr. Erikkson sugeriu: https://stackoverflow.com/a/11494666/9903
fonte
import *
. Editou sua postagem.É importante notar que você não precisa substituir
get_object()
para procurar um objeto com base em um slug passado como uma palavra-chave arg - você pode usar os atributos de umSingleObjectMixin
https://docs.djangoproject.com/en/1.5/ref/ class-based-views / mixins-single-object / # singleobjectmixin(ambos
slug_field
e oslug_url_kwarg
padrão'slug'
)fonte
Se você deseja adicionar um objeto ao contexto do modelo, pode substituir
get_context_data
e adicionar ao seu contexto. A solicitação também faz parte de si mesmo , caso você precise do request.user .fonte
MyObject
?Você pode passar parâmetros de urls.py https://docs.djangoproject.com/en/1.7/topics/http/urls/#passing-extra-options-to-view-functions
Isso também funciona para visualizações genéricas. Exemplo:
Nesse caso, os parâmetros passados para a visualização não devem ser necessariamente variáveis de instância da classe Visualização. Usando este método, você não precisa codificar o nome da página padrão no modelo YourView, mas pode apenas passá-lo como um parâmetro do urlconf.
fonte
Como afirmado por Yaroslav Nikitenko , se você não quer para codificar uma nova variável de instância para a classe View, você pode passar opções extras para visualizar as funções da
urls.py
seguinte forma:Eu só queria acrescentar como usá-lo a partir da visualização. Você pode implementar um dos seguintes métodos:
fonte
DetailView
classe. Você poderia explicar como usá-lo aí?Para django 3.0, isto é o que funcionou para mim:
fonte