У меня есть настраиваемое представление на основе классов
# 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)
Я хочу передать параметр slug (или другие параметры в представление) следующим образом
MyView.as_view(slug='hello_world')
Нужно ли мне переопределить какие-либо методы, чтобы это сделать?
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')
Каждый параметр, передаваемый
as_view
методу, является переменной экземпляра класса View. Это означает, что для добавленияslug
в качестве параметра вы должны создать его как переменную экземпляра в своем подклассе:Это должно
MyView.as_view(slug='hello_world')
сработать.Если вы передаете переменные через ключевые слова, используйте то, что предложил г-н Эрикксон: https://stackoverflow.com/a/11494666/9903
источник
import *
. Отредактировал свой пост.Стоит отметить, что вам не нужно переопределять
get_object()
, чтобы искать объект на основе slug, переданного как ключевое слово arg - вы можете использовать атрибутыSingleObjectMixin
https://docs.djangoproject.com/en/1.5/ref/ представления на основе классов / mixins-single-object / # singleobjectmixin(оба
slug_field
и поslug_url_kwarg
умолчанию'slug'
)источник
Если вы хотите добавить объект в контекст для шаблона, вы можете переопределить
get_context_data
и добавить в его контекст. Запрос также является частью self, если вам нужен request.user .источник
MyObject
?Вы можете передавать параметры из urls.py https://docs.djangoproject.com/en/1.7/topics/http/urls/#passing-extra-options-to-view-functions
Это также работает для общих представлений. Пример:
В этом случае параметры, передаваемые в представление, не обязательно должны быть переменными экземпляра класса View. Используя этот метод, вам не нужно жестко указывать имя страницы по умолчанию в модели YourView, но вы можете просто передать его в качестве параметра из urlconf.
источник
Как заявил Ярослав Никитенко , если вы не хотите , чтобы жёстко новую переменную экземпляра в классе View, вы можете передать дополнительные опции для просмотра функций из
urls.py
так:Я просто хотел добавить, как его использовать из представления. Вы можете реализовать один из следующих способов:
источник
DetailView
класс. Не могли бы вы объяснить, как его там использовать?Для django 3.0 у меня сработало следующее:
источник