python – Django继承和永久链接
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Django继承和永久链接,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1841字,纯文字阅读大概需要3分钟。
内容图文
![python – Django继承和永久链接](/upload/InfoBanner/zyjiaocheng/699/e3732f3ce26e4e8fafb0f94603fc7b78.jpg)
我在django中创建了一个简单的CMS,有多个“模块”(每个都是django应用程序).我已经设置了以下模型:
class FooObject(models.Model):
id = models.SlugField(primary_key=True)
name = models.CharField(max_length=255)
creator = models.ForeignKey(auth.models.User, editable=False, related_name="createdby")
class FooPage(FooObject):
content = models.TextField(blank=True, null=True)
@models.permalink
def get_absolute_url(self):
return ('page', (), {'page_id':self.id}
class FooSubitem(FooObject):
parent = models.ForeignKey(FooPage, related_name='subitems')
在每个模块中,我创建了一个FooPage的子类,以及至少一个FooSubitem的子类,例如
# in FooBlog.models
class FooBlog(FooPage):
owner = models.ForeignKey(auth.models.User, editable=False)
@models.permalink
def get_absolute_url(self):
return ('blog', (), {'blog_id':self.id})
class FooPost(FooSubitem):
post_time = models.DateTimeField(auto_now_add=True)
和
# in FooGallery.models
class FooGallery(FooPage):
location = models.CharField(max_length=255)
@models.permalink
def get_absolute_url(self):
return ('gallery', (), {'gallery_id':self.id})
class FooImage(FooSubitem):
image_file = models.ImageField(upload_to='foogallery')
这些是简化,但应该让你很好地了解我正在尝试做什么.在FooPost和FooImage的管理员中,我将父选择列表限制为其对应的父页面.
当我尝试在模板中使用这些时,我的问题就出现了.在每个视图中,我有以下内容:
page_list = FooPage.objects.all()
它返回FooBlog和FooGallery类型的所有FooPages的列表.但是,当我遍历此列表时:
{% for page in page_list %}{{ page.get_absolute_url }}{% endfor %}
它返回’page’URL模式,而不是’blog’或’gallery’URL模式.
当我想稍后添加FooCalendar模块时,如何在不重写代码的情况下完成这项工作?我想确保这适用于任何可能的模块.
谢谢,
> Lexo
解决方法:
此问题的经典解决方案往往是adding a ContentType to the superclass which stores the type of subclass for that instance.这样,您可以依赖于返回相应类型的相关子类对象的一致API.
内容总结
以上是互联网集市为您收集整理的python – Django继承和永久链接全部内容,希望文章能够帮你解决python – Django继承和永久链接所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。