了解 Django 基于类(DetailView 和 View)

涂博之

我正在将一些基于函数的视图转换为基于类的视图,以使我的视图更具可读性。但是我不太了解它的使用DetailView以及如何将它实际集成到我的代码中以便将 a 传递slug到我的函数中。

现在,我正在使用View并将其传递slug到我的函数中,如下所示:

#urls.py
path('preview/<slug:slug>/', views.Preview.as_view(), name='toPreview')

#views.py 
@method_decorator(auth0_login_required, name='dispatch')
class Preview(View):
    template_name = 'authenticated/preview.html'

    @card_is_chosen
    def get(self, slug, request, *args, **kwargs): 
        person = get_object_or_404(Person, slug=slug, status=True)
        ...        
        return render(request, self.template_name, {...})

我也不太确定这是否是最佳实践,以防万一 DetailView 提供什么?


编辑:尝试使用评论中提到的 DetailView,我该如何解决此错误?

#urls.py
path('preview/<slug:slug>/', views.Preview.as_view(), name='toPreview')

#views.py 
@method_decorator(auth0_login_required, name='dispatch')
class Preview(DetailView):
    model = Person
    template_name = 'preview.html'

    @card_is_chosen
    def get(self, request, *args, **kwargs): 
        print(slug) 
        #slug is not defined, how should I fetch slug parameter?
        ...

        return render(request, self.template_name, {...})

追溯:

File "C:\Users\...\Desktop\env\src\...\apps\businesscards\decorators.py", line 60, in wrap
    return function(self, request, slug, *args, **kwargs)
  File "C:\Users\...\Desktop\env\src\...\apps\businesscards\views.py", line 160, in get
    person = get_object_or_404(Person, slug=slug, status=True)
NameError: name 'slug' is not defined
阿拉斯代尔

由于您的 slug 字段被称为slug,您只需要在详细信息视图中指定modeltemplate_name详细视图将负责获取带有该 slug 的人。

from django.views.generic import DetailView

@method_decorator([auth0_login_required, card_is_chosen] name='dispatch')
class PersonDetailView(DetailView):
    model = Person
    template_name = 'authenticated/preview.html'

    def get_context_data(self, **kwargs):
        """
        get_context_data is one of the important hooks in generic class
        based views. It lets you add extra variables to the template context
        """
        context = super(PersonDetailView, self).get_context_data(**kwargs)
        context['extra'] = 'extra value'
        return context

在上面,我假设可以dispatchcard_is_chosen. 如果不是这种情况,您可以添加method_decorator(card_is_chosen, name='get')我添加了一个get_context_data- 上面的代码不需要它,但它可能对...您未显示的问题中的某些代码有用

如果您要覆盖该get方法,我将使用通常的签名def get(self, request, *args, **kwargs):然后获取 slug forself.kwargs

def get(self, request, *args, **kwargs):
    slug = self.kwargs['slug']

您通常应该避免覆盖getpost通用的基于类的视图。您可能会失去功能或不得不重复代码。通常有更具体的属性或方法可以覆盖。

最后,不要认为基于类的视图总是更好。就我个人而言,我会发现以下基于函数的视图比您的视图更容易阅读Preview

@auth0_login_required
@card_is_chosen
def person(request, slug):
    person = get_object_or_404(Person, slug=slug, status=True)
    template_name = 'authenticated/preview.html'
    ...
    return render(request, template_name, {...})

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

了解Django中的VIew评估

来自分类Dev

了解Django的模型类

来自分类Dev

了解Django的模型类

来自分类Dev

了解原型和“类”

来自分类Dev

了解原型和“类”

来自分类Dev

基于Django类的视图:了解视图类中的参数

来自分类Dev

在基于Django类的视图(DetailView)中与POST方法相反

来自分类Dev

了解Django

来自分类Dev

了解c ++类和函数调用

来自分类Dev

了解Java中的类和变量

来自分类Dev

Python:了解类和实例变量

来自分类Dev

了解Bootstrap导航类和属性

来自分类Dev

Django:尝试了解queryset属性在基于类的通用视图中如何工作

来自分类Dev

在模板中将抽象类用于Django中基于通用类的DetailView

来自分类Dev

将Muliple模型与基于类的View Django 2.0结合使用

来自分类Dev

了解Django JSONField键路径查询和详尽集

来自分类Dev

django rest框架-了解身份验证和登录

来自分类Dev

如何使用基于类的视图DetailView将图像库放入Django中的product.html

来自分类Dev

在Django 1.8中创建基于登录和注销类的视图

来自分类Dev

Django:具有Mixins和Dispatch方法的基于类的视图

来自分类Dev

基于Django类的视图自定义404和500

来自分类Dev

基于Django类的视图-请求,args和kwargs对象

来自分类Dev

在Django 1.8中创建基于登录和注销类的视图

来自分类Dev

无法使用基于类的视图和 Django 表单更新数据

来自分类Dev

了解View.drawableStateChanged

来自分类Dev

Django模型管理员应该了解模型类吗?

来自分类Dev

了解接口,类和继承的UML表示形式吗?

来自分类Dev

了解Ruby on Rails中的类变量和方法

来自分类Dev

了解Ruby on Rails中的类变量和方法

Related 相关文章

热门标签

归档