【问题标题】:django how to create TemplateView instance with codedjango 如何使用代码创建 TemplateView 实例
【发布时间】:2013-08-07 13:19:04
【问题描述】:

我有一个函数视图,我想在这个函数中创建一个TemplateView实例,比如

def MyView(request):
    #view =TemplateView(request)
    #view =TemplateView.as_view()
    #view =TemplateView.as_view()(request)
    return view

但是,所有这些都是错误的。如何创建视图?

网址:

mysite/widget1/
mysite/widget2/
mysite/widget3/

观看次数:

class BaseWidgetTemplateView(TemplateView):
    pass
class Widget1View(BaseWidgetTemplateView):
    pass
class Widget2View(BaseWidgetTemplateView):
    pass
class Widget3View(BaseWidgetTemplateView):
    pass

传递给函数视图和传递给TemplateView的请求是不同的对象类型 传递给函数的请求是

module 'django.http.request

TemplateView 中的请求是

WSGIRequest

【问题讨论】:

  • 您已经问过这个问题,所以请说明您需要做什么。为什么你想做这样的事情而不是使用标准的 cbv 方法? docs.djangoproject.com/en/1.5/topics/class-based-views/intro
  • 是的,但是这个问题已经结束了。我想做的是我有一些 URL,比如 data/1/、data/2/、data/3……和 data/1/ 使用 TemplateView1 ,data/2/ user TemplateView2....动态获取 url 中的 TemplateView。所以我的方法是定义一个函数视图,并在这个视图中调用不同的 TemplateView
  • 如果它被关闭,可能是因为它不是一个合适的问题。告诉我们您想做什么,也许我们可以提供帮助。很可能 TemplateView 不是满足您需要的最佳方式。
  • 那么如何使用 TemplateView 进行操作

标签: django django-views


【解决方案1】:

再次,class based views page Django 文档:

(r'mysite/widget1/', Widget1View.as_view()),
(r'mysite/widget2/', Widget2View.as_view()),
(r'mysite/widget3/', Widget2View.as_view()),

这就是您需要在urls.py 文件中定义的全部内容。

【讨论】:

  • 你我知道这种方式。但是有什么方法可以动态调用模板视图吗?如 (r'mysite/widget(?P\d+)/', Widget(id)View.as_view()),
  • 如果你需要做类似的事情,你可能需要重新考虑你的设计(如:在一个视图中获取 并在那里做你需要的事情,而不是为您需要的每种类型的ID)
  • 是的,我已经考虑过了......在 get_context_data 中使用你的方法很好。但在 post_context_data 中并不好。所以这就是使用不同视图的原因。谢谢大家
  • ??? post_context_data 是什么?您可以在重新定义的 post 方法中获取相同的 <id> 参数,因为您有可用的请求。真的,请查看有关基于类的视图的文档
  • TemplateView 有 get_context_data 到 get 方法请求,我将 post_context_data 添加到 TemplateView。每个小部件视图都有不同的表单要编辑,所以我必须在不同的 post_context_data 中编辑表单。
猜你喜欢
  • 1970-01-01
  • 2021-02-04
  • 2011-04-16
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多