在url.py中我有以下几行:
url(r'^(?P<slug>[\w-]+)/*$', ViewPage.as_view(), name='view'),
url(r'^(?P<slug>[\w-]+)/__create$', CreatePage.as_view(), name='create'),
并在views.py中:
class ViewPage(DetailView):
model = Page
slug_field = 'url'
def get_object(self, *args, **kwargs):
if getattr(self, 'object', None):
return self.object
return super(ViewPage, self).get_object(*args, **kwargs)
def get(self, request, *args, **kwargs):
try:
self.object = self.get_object()
except Http404:
# return custom template
return reverse('create', kwargs=kwargs)
context = self.get_context_data(object=self.object)
return self.render_to_response(context)
class CreatePage(CreateView):
model = Page
slug_field = 'url'
此代码的主要目标是在对象不存在的情况下调用CreatePage。 但在线&#34;反向(&#39;创造&#39;,kwargs = kwargs)&#34;我收到了错误: &#39; STR&#39;对象没有属性&#39; get&#39;
据我所知,我无法正确传达变量kwargs。
所以我的问题:
1) May be other way to do what I want?
2) Or how to properly pass kwargs?
答案 0 :(得分:0)
首先,了解此错误有助于您的查看功能,而不是reverse
。因此,您有一个URL,它没有正确格式化。
django视图必须返回HttpResponse
类型或子类,不能返回字符串。您可以在响应HttpResponse("my string")
中返回一个字符串,但不能直接返回字符串。
在您的情况下,请返回HttpResponseRedirect
return http.HttpResponseRedirect(reverse(...))
答案 1 :(得分:0)
另一种选择是使用django的快捷方式重定向功能。
from django.core.urlresolvers import redirect
from django.shortcuts import redirect # <---
def foo(request, *a, **kw):
return redirect(reverse("bar", kw=kw)) # <---
我个人喜欢基于功能的风格。