Django 无法重定向到最近创建的detailview
在尝试重定向到新创建的对话详细信息页面时,我遇到以下错误 NoReverseMatch at/conversations/start/ 对于未找到任何参数的“对话详细信息”,则相反。尝试了1种模式:[“对话/(?P[-a-zA-Z0-9_zu;]+)/$”] 当我手动键入URL时,slug工作得非常好,因此我认为它与Django 无法重定向到最近创建的detailview,django,django-models,django-views,Django,Django Models,Django Views,在尝试重定向到新创建的对话详细信息页面时,我遇到以下错误 NoReverseMatch at/conversations/start/ 对于未找到任何参数的“对话详细信息”,则相反。尝试了1种模式:[“对话/(?P[-a-zA-Z0-9_zu;]+)/$”] 当我手动键入URL时,slug工作得非常好,因此我认为它与StartConversationView上的返回反向逻辑有关 请让我知道任何我可以尝试的事情(我已经尝试了下面的评论) 型号.py class Conversation(model
StartConversationView
上的返回反向逻辑有关
请让我知道任何我可以尝试的事情(我已经尝试了下面的评论)
型号.py
class Conversation(models.Model):
conversation = models.CharField(max_length=60, null=True, blank=False, unique=False)
detail = models.CharField(max_length=600, null=True, blank=False, unique=False)
slug = models.SlugField(max_length=80, null=True, blank=True)
def __str__(self):
return self.conversation
def save(self, *args, **kwargs):
if not self.id:
self.slug = slugify(self.conversation+'-'+str(datetime.now().strftime("%Y-%m-%d-%H%M")))
super(Conversation, self).save(*args, **kwargs)
def get_absolute_url(self):
#return reverse('conversation_detail', args=[str(self.slug)])
return reverse('conversation_detail', kwargs={'slug': self.slug})
class StartConversationView(LoginRequiredMixin, View):
def get(self, request, *args, **kwargs):
form = StartConversationForm()
return render(request, 'conversations/start.html', {'form': form})
def post(self, request, *args, **kwargs):
form = StartConversationForm(request.POST)
if form.is_valid():
new_conversation = form.save(commit=False)
new_conversation.starter = request.user
new_conversation.save()
messages.success(request, ('You have successfully started a new conversation.'))
return redirect(reverse('conversation_detail'), slug=self.kwargs.get('slug'))
#return redirect(reverse('conversation_detail'), kwargs = {'slug': self.slug })
#return redirect('conversation_detail'), self.slug=slug)
#return HttpResponseRedirect(reverse('conversation_detail', kwargs={'slug': self.slug}))
#return HttpResponseRedirect(reverse(self.get_absolute_url()))
#return redirect('login')
return render(request, 'conversations/start.html' , {'form': form})
class ConversationDetailView(LoginRequiredMixin, DetailView):
model = Conversation
slug_field = 'slug'
template_name = 'conversations/conversation_detail.html'
urlpatterns = [
path('start_circle/',StartCircleView.as_view(), name='start_circle'),
path('start/',StartConversationView.as_view(), name='start_conversation'),
path('<slug:slug>/',ConversationDetailView.as_view(), name='conversation_detail'),
]
视图.py
class Conversation(models.Model):
conversation = models.CharField(max_length=60, null=True, blank=False, unique=False)
detail = models.CharField(max_length=600, null=True, blank=False, unique=False)
slug = models.SlugField(max_length=80, null=True, blank=True)
def __str__(self):
return self.conversation
def save(self, *args, **kwargs):
if not self.id:
self.slug = slugify(self.conversation+'-'+str(datetime.now().strftime("%Y-%m-%d-%H%M")))
super(Conversation, self).save(*args, **kwargs)
def get_absolute_url(self):
#return reverse('conversation_detail', args=[str(self.slug)])
return reverse('conversation_detail', kwargs={'slug': self.slug})
class StartConversationView(LoginRequiredMixin, View):
def get(self, request, *args, **kwargs):
form = StartConversationForm()
return render(request, 'conversations/start.html', {'form': form})
def post(self, request, *args, **kwargs):
form = StartConversationForm(request.POST)
if form.is_valid():
new_conversation = form.save(commit=False)
new_conversation.starter = request.user
new_conversation.save()
messages.success(request, ('You have successfully started a new conversation.'))
return redirect(reverse('conversation_detail'), slug=self.kwargs.get('slug'))
#return redirect(reverse('conversation_detail'), kwargs = {'slug': self.slug })
#return redirect('conversation_detail'), self.slug=slug)
#return HttpResponseRedirect(reverse('conversation_detail', kwargs={'slug': self.slug}))
#return HttpResponseRedirect(reverse(self.get_absolute_url()))
#return redirect('login')
return render(request, 'conversations/start.html' , {'form': form})
class ConversationDetailView(LoginRequiredMixin, DetailView):
model = Conversation
slug_field = 'slug'
template_name = 'conversations/conversation_detail.html'
urlpatterns = [
path('start_circle/',StartCircleView.as_view(), name='start_circle'),
path('start/',StartConversationView.as_view(), name='start_conversation'),
path('<slug:slug>/',ConversationDetailView.as_view(), name='conversation_detail'),
]
url.py
class Conversation(models.Model):
conversation = models.CharField(max_length=60, null=True, blank=False, unique=False)
detail = models.CharField(max_length=600, null=True, blank=False, unique=False)
slug = models.SlugField(max_length=80, null=True, blank=True)
def __str__(self):
return self.conversation
def save(self, *args, **kwargs):
if not self.id:
self.slug = slugify(self.conversation+'-'+str(datetime.now().strftime("%Y-%m-%d-%H%M")))
super(Conversation, self).save(*args, **kwargs)
def get_absolute_url(self):
#return reverse('conversation_detail', args=[str(self.slug)])
return reverse('conversation_detail', kwargs={'slug': self.slug})
class StartConversationView(LoginRequiredMixin, View):
def get(self, request, *args, **kwargs):
form = StartConversationForm()
return render(request, 'conversations/start.html', {'form': form})
def post(self, request, *args, **kwargs):
form = StartConversationForm(request.POST)
if form.is_valid():
new_conversation = form.save(commit=False)
new_conversation.starter = request.user
new_conversation.save()
messages.success(request, ('You have successfully started a new conversation.'))
return redirect(reverse('conversation_detail'), slug=self.kwargs.get('slug'))
#return redirect(reverse('conversation_detail'), kwargs = {'slug': self.slug })
#return redirect('conversation_detail'), self.slug=slug)
#return HttpResponseRedirect(reverse('conversation_detail', kwargs={'slug': self.slug}))
#return HttpResponseRedirect(reverse(self.get_absolute_url()))
#return redirect('login')
return render(request, 'conversations/start.html' , {'form': form})
class ConversationDetailView(LoginRequiredMixin, DetailView):
model = Conversation
slug_field = 'slug'
template_name = 'conversations/conversation_detail.html'
urlpatterns = [
path('start_circle/',StartCircleView.as_view(), name='start_circle'),
path('start/',StartConversationView.as_view(), name='start_conversation'),
path('<slug:slug>/',ConversationDetailView.as_view(), name='conversation_detail'),
]
urlpatterns=[
路径('start_circle/',StartCircleView.as_view(),name='start_circle'),
路径('start/',StartConversationView.as_view(),name='start_conversation'),
路径(“/”,ConversationDetailView.as_view(),name='conversation_detail'),
]
试试看
class StartConversationView(View):
...
def post(self, request, *args, **kwargs):
form = StartConversationForm(request.POST)
if form.is_valid():
new_conversation = form.save(commit=False)
new_conversation.starter = request.user
new_conversation.save()
messages.success(request, ('You have successfully started a new conversation.'))
return redirect(reverse('conversation_detail', kwargs={'slug':new_conversation.slug}))
return render(request, 'detail.html' , {'form': form})
成功了。非常感谢,先生。我唯一需要修改的是返回render(请求,'conversation_detail',{'form':form})