python - 如何使用我的 reverse_lazy 函数解决此错误?
问题描述
使用 CreateView 时出现以下错误:
NoReverseMatch at /campus/NG Waverley Central/create
Reverse for 'campus_page' with no arguments not found. 1 pattern(s) tried: ['campus/(?P<campusid>[^/]+)/$']
我怀疑这与我从CampusPage视图向前传递Campusid的事实有关,并且我不知道如何在 reverse_lazy 函数中传递这个Campusid 。
我的 urls.py 如下所示:
urlpatterns = [
path('<str:campusid>/', views.CampusPage, name='campus_page'),
path('login/', auth_views.LoginView.as_view(), name='login'),
path('<str:campusid>/create', views.CreateStreamEvent.as_view(),name='create_streamevent'),
]
我的 views.py 如下所示:
def CampusPage(request, campusid):
campusobj = CampusModel.objects.filter(campus_name=campusid)
return render(request, 'campus/campus_page.html',{'campusid':campusid,'campusobj':campusobj})
class CreateStreamEvent(LoginRequiredMixin, CreateView):
model = StreamEvent
fields = ['title','campus']
template_name = 'campus/create_streamevent.html'
success_url = reverse_lazy('campus_page')
def form_valid(self, form):
form.instance.user = self.request.user
super(CreateStreamEvent, self).form_valid(form)
return redirect('campus_page')
我不知道是否有必要,但我的 models.py 如下所示:
class CampusModel(models.Model):
campus_name = models.CharField(max_length=255, unique=True)
description = models.TextField(blank=True,default='')
banner = models.ImageField(upload_to=None, height_field=None, width_field=None, max_length=100,null=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.campus_name
class StreamEvent(models.Model):
title = models.CharField(max_length=255)
date_added = models.DateField(auto_now=False, auto_now_add=True)
date_published = models.DateField(auto_now=True, auto_now_add=False)
campus = models.ForeignKey(CampusModel, on_delete=models.CASCADE)
def __str__(self):
return self.title
class Video(models.Model):
title = models.CharField(max_length=255)
url = models.URLField()
youtube_id = models.CharField(max_length=255)
streamevent = models.ForeignKey(StreamEvent, on_delete=models.CASCADE,null=True)
def __str__(self):
return self.title
解决方案
在您看来,您写道:
success_url = reverse_lazy('campus_page')
但是 urlcampus_page
需要一个关键字参数campusid
。而不是设置success_url覆盖get_success_url:
from django.urls import reverse
class CreateStreamEvent(LoginRequiredMixin, CreateView):
model = StreamEvent
fields = ['title','campus']
template_name = 'campus/create_streamevent.html'
def form_valid(self, form):
form.instance.user = self.request.user
return super(CreateStreamEvent, self).form_valid(form)
def get_success_url(self):
return reverse('campus_page', kwargs={'campusid': self.kwargs.get('campusid')})
推荐阅读
- html - 具有 2 级和 3 级的全宽子菜单
- spring - 春季启动并使用facebook做出反应登录
- r - R - 用来自另一个矩阵的特定数据块的数据填充矩阵
- ios - iOS 11 prefersLargeTitles 在方向更改后不扩展
- javascript - 重新加载 Puppeteer => page.setCookie(...cookies) 后 Cookies 消失了
- llvm - LLVM 中的 OpaqueType::get() 函数
- matlab - 在matlab中读取具有可变条目数的文本文件
- ruby - 检查 Ruby 代码中的命令行参数是否存在
- c# - 在 connectionString 中添加新连接
- backup - 使用命令行工具备份 STM32 固件