所以基本上我有一个复杂的场景。我目前正在使用Django建立一个网站,我目前制作了两个应用程序。两个应用程序的字段几乎相同。我想要关注的领域是Information字段(它们都有,我在Wikipedia模型的帮助下自动生成)所以这里的情况是我要在html中创建一个if和else语句以这种方式,如果我超链接的页面存在它将转到处理DetailView的链接但如果它不存在我将重定向到创建视图我还应该注意这两个应用程序的名称链接的帮助外键,但当我尝试使用相同的名称打开信息链接时,他们给了我不同的pks
我觉得我不能很好地解释我的问题,但我希望有人能理解我的意思
UPDATE
好吧,我使用创建get函数
def get(self, request, *args, **kwargs):
try:
self.object = self.get_object()
except Http404:
return redirect('/create/')
context = self.get_context_data(object=self.object)
return self.render_to_response(context)
但我不知道如何使用我创建的创建视图功能而不是我放的链接
这是详细信息视图Html
{%extends "home.html"%}
{%block head_title%} {{block.super}}{%endblock head_title%}
{% block content%}
<!-- verify authentication -->
{% if request.user.is_authenticated%}
<h3><a href="{%url 'InfoPedia:UpdateView' object.id %}">{{object.title}}</a></h3><br/>
{% endif %}
<ul type="disc">
<div class="container">
<li><b>Artist: </b>{{object.Summary}}</li>
<li><b>Genre: </b>{{object.Genre}}</li>
<li><b>Bio: </b><br>{{object.Bio}}</li>
<a href ="/Blog/{{object.slug}}/edit">EDIT</a>
</div>
</ul>
{%endif%}
{% endblock %}
这是我的模特
from django.db import models
from django.conf import settings
from Blog.models import MainPage
from django.urls.base import reverse
from Blog.Retrieve import retriever
from django.db.models.signals import pre_save,post_save
import InfoPedia
class InfoPedia(models.Model):
user =models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
Name =models.ForeignKey(MainPage,on_delete=models.CASCADE)
Location =models.CharField(max_length= 50,null=True,blank=True)
Information =models.TextField(null=True,blank=True)
TrackListing=models.TextField(null=True,blank=True)
Published=models.BooleanField(default=True)
Timestamp=models.DateTimeField(auto_now=True)
Updated=models.DateTimeField(auto_now=True)
def get_absolute_url(self):
# return f"/Blog/{self.slug}"
return reverse('InfoPedia:DetailView', kwargs={"pk":self.pk})
class Meta:
ordering=["-Updated","-Timestamp"] #orranges in order of updated
def get_tracklist(self):
return self.TrackListing.split(",")
def Information_create_pre_save( instance, sender, **kwargs):
instance.Information=retriever(instance.Name)
def rl_post_save_reciever(sender, instance,created,*args,**kwargs):
print("saved")
print(instance.Timestamp)
pre_save.connect(Information_create_pre_save, sender=InfoPedia)
post_save.connect(rl_post_save_reciever, sender=InfoPedia)
另一种方法 - 而不是检查HTML中的if / else,只需创建指向DetailView
URL的所有链接。
然后,在DetailView的get()
处理程序中,执行对象的查询集查找。如果没有找到对象,则不是显示DetailView
HTML,而是向用户返回302 redirect(即临时重定向)到该对象的CreateView
。所以你的所有if / else逻辑都在view函数或类中,而不是HTML。