2011-06-07 82 views
37

我使用的是通用的CreateView的一样:Django的 - 基于类的通用视图 - “没有URL重定向到”

#urls.py 

from django.conf.urls.defaults import * 
from django.views.generic import CreateView 
from content.models import myModel 

urlpatterns = patterns('myApp.views', 
    (r'myCreate/$', CreateView.as_view(model=myModel)), 
) 

有了这样一个mymodel_form.html模板:

<form method="post" action=""> 
{% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Submit" /> 
</form> 

当我提交我的形式,创建新的对象,但我得到的错误

ImproperlyConfigured在...

没有到 重定向到的URL。提供一个url或 定义一个get_absolute_url方法的 模型。

如何指定要成功重定向的url?

回答

64

您是否尝试过success_url?例如

CreateView.as_view(model=myModel, success_url="/success/") 

,或者如果你想重定向到一个命名视图:

CreateView.as_view(model=myModel, success_url=reverse('success-url')) 
+1

这就是我忘了。谢谢 – 2011-06-07 14:20:08

+7

@Glide没问题。关键在于'success_url'没有记录在'CreateView'下,而是'ModelFormMixin'下。 Django文档有时可能很难实现。 – NickAldwin 2011-06-07 14:21:20

+0

好吧,没错,文档真的很好,但这里有这么多的概念...找不到明显的东西 – 2011-06-07 14:39:27

13

你也可以尝试在你的模型来定义get_absolute_url。例如

class Something(models.Model): 
    name = models.CharField(max_length=50, verbose_name='name') 

    class Meta: 
     pass 

    def get_absolute_url(self): 
     return u'/some_url/%d' % self.id 
0

添加在访问量:

def form_valid(self, form): 

    return self.render_to_response(self.get_context_data(form=form))