我正在创建一个基本的cms / wiki作为学习项目。请原谅我的无聊问题。
我的维基有页面。有不同类型的页面。他们有一些共同的领域和一些独特的领域。 我已经将我的三个模型包括在内,以展示我是如何进行这项工作的。 (一个具有实际页面继承的公共字段的模型)
class DefaultPage(models.Model):
title = models.CharField(max_length=100)
created_date = models.DateTimeField(auto_now_add=True, auto_now=False)
edited_date = models.DateTimeField(auto_now_add=False,auto_now=True)
child_pages = models.ManyToManyField("self",blank=True)
slug = models.SlugField(max_length=100,editable=False,blank=True)
def __unicode__ (self):
return self.title
def save(self, *args, **kwargs):
if not self.id:
self.slug = slugify(self.title)
super(DefaultPage, self).save(*args, **kwargs)
class Page(DefaultPage):
body = models.TextField(blank=True)
class LearningObject(DefaultPage):
archivefile = models.FileField(upload_to='static/learningobject/archivefiles/%Y/%m/%d')
indexpath = models.CharField(max_length=254,editable=False)
def unpackarchive(self):
archive = self.archivefile
filename = os.path.basename(str(archive))
folder = str(filename).split(".")[0]
print folder
index_found = "False"
with zipfile.ZipFile(archive,"r") as z:
for each in z.namelist():
if each == "index.html" or each == "index.htm":
index_found = "True"
else:
pass
if not index_found:
print "zip file does not contain a valid index.html file"
else:
path = os.path.join("static","learningobject","unpackedarchives",folder)
z.extractall(path)
self.findindex(path)
def findindex(self,path):
print path
for root, dirnames, filenames in os.walk(path):
for filename in fnmatch.filter(filenames, 'index.ht*'):
print filename
self.indexpath = os.path.join(root, filename)
print self.indexpath
def save(self, *args, **kwargs):
self.unpackarchive()
super(LearningObject, self).save(*args, **kwargs)
我的urls.py将defaultpage.slug传递给
url(r'^(?P<default_page_slug>[\w\-]+)/$', views.defaultpageview, name='defaultpageview'),
DefaultPage.objects.get(slug = default_page_slug)
的视图def defaultpageview(request, default_page_slug):
context_dict = {}
try:
default_page = DefaultPage.objects.get(slug=default_page_slug)
context_dict['default_page'] = default_page
except:
pass
return render(request,'wiki/default_page.html',context_dict)
反过来又以模板
结束 <!DOCTYPE html>
<html>
<head>
<title>{{default_page.title}}</title>
</head>
<body>
<h1>{{default_page.title}}</h1>
{% if default_page.body %}
<p>
{{default_page.body}}
<p>
{%elif default_page.indexpath %}
{{default_page.indexpath}}
{% endif %}
</body>
</html>
但是我无法调用default_page.indexpath或default_page.body
我是否能够使用我正在尝试的方法,或者我是否需要在视图中传递所有模型而不是父模型?
很抱歉,如果我使用的条款不正确。请随时编辑以纠正我。
答案 0 :(得分:0)
您正在查询DefaultPage对象,以便获得所需内容。 DefaultPage对象没有任何这些字段;只有子类才有。如果您想使用body
,则需要查询包含该字段的类,并且indexpath
也是如此。