Django - 基于类的通用视图 - “没有要重定向到的 URL”

Posted

技术标签:

【中文标题】Django - 基于类的通用视图 - “没有要重定向到的 URL”【英文标题】:Django - Class Based Generic View - "No URL to redirect to" 【发布时间】:2011-09-10 02:52:04 【问题描述】:

我正在使用通用的 CreateView,例如:

#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>

当我提交表单时,新对象已创建,但出现错误

在...处配置不正确

没有网址 重定向到。提供网址或 定义一个 get_absolute_url 方法 模型。

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

【问题讨论】:

【参考方案1】:
class PostDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
    model = Post
    success_url = '/'
    def test_func(self):
        post = self.get_object()
        if self.request.user == post.author:
            return True
        return False

【讨论】:

【参考方案2】:

views.py/

from django.views.generic import CreateView
from .models import myModel

class createView(CreateView):
    model = myModel
    fields = ['your fields', ...'']

    def get_success_url(self):
        return reverse('some_url')

urls.py/(你的应用)

from django.urls import path
from . import views

urlpatterns = [
    path('create/', views.createView.as_view(), name='create') 
] 

【讨论】:

您能否解释一下为什么您的解决方案有效以及为什么它是一个好的答案。 ***.com/help/how-to-answer 我建议不要这样命名。首先:您的视图应该以大写字母开头:例如创建视图。第二:将您的类命名为 createView 将很难将其与 CreateView 区分开来。【参考方案3】:

您也可以尝试在模型中定义 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 

【讨论】:

当主要答案没有时,这个对我有用。【参考方案4】:

添加视图:

def form_valid(self, form):

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

【讨论】:

【参考方案5】:

您是否尝试过传入success_url?例如

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

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

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

【讨论】:

那是我忘记的。谢谢 @Glide 没问题。关键是success_url 没有记录在CreateView 下,而是在ModelFormMixin 下。 Django 文档有时很难读懂。 好的,对了,文档真的很好,但是这里的概念太多了...... 找到东西并不总是很明显 @Glide 可能需要一些搜索。顺便说一句,当答案有用时,不要忘记投票。谢谢! 如果我想“回到我从哪里来”,重定向回启动创建的页面怎么办?

以上是关于Django - 基于类的通用视图 - “没有要重定向到的 URL”的主要内容,如果未能解决你的问题,请参考以下文章

基于 Django 类的视图和通用视图详细信息使用

Django 基于类的通用视图和身份验证

如何根据 Django 中当前基于类的通用视图模型向模板加载器添加路径

从 Django 中基于类的通用视图自定义表单变量的首选方法是啥?

从 Django 中基于类的通用视图将 request.user 对象发送到 ModelForm

从Django中基于类的通用视图向ModelForm发送request.user对象