0

我在 django 中使用我的 miniportfolio,不确定错误告诉我什么。

模型.py

class Page(models.Model):
    title = models.CharField(max_length=30)
    slug = models.SlugField()
    content = models.TextField()

def get_absolute_url(self):
    return "/%s" % self.slug

def __unicode__(self):
    return self.title

def __repr__(self):
    return self.name

视图.py

def page_view(request, **kwargs):
    slug = kwargs.get('slug')
    page = get_object_or_404(Page, slug=slug)   
    content = page.content
    title = page.title
    return render_to_response("base.html", {"content":content, "title":title})  

网址.py

url(r'^(?P<page>)/$', page_view),

当我从管理界面创建一个新页面时,我得到了一些非常奇怪的 url。127.0.0.1:3020/admin/r/7/3/ <--我不知道他们为什么会这样。提示?当我访问我创建的页面时,我得到一个 404。

4

2 回答 2

0
def page_view(request, **kwargs):
    slug = kwargs.get('page') # hello page! I found you
...

因为你使用page的变量不在slugurls.py

url(r'^(?P<page>)/$', page_view),

或者你可以写视图

def page_view(request, page=None):
    page_from_db = get_object_or_404(Page, slug=page)
    return render(request, "base.html", {"page": page_from_db})

在 tpl

{{ page.content }}

如果你使用 1.4 使用from django.shortcuts import render

自动渲染使用上下文

于 2012-07-24T09:22:24.717 回答
0

改变:

def get_absolute_url(self):
    return ('page', (), {
    'slug': self.slug,
    'id': self.id,
    }) 

类似于:

def get_absolute_url(self):
    return "/APP_URL_PATH/%s/" % self.slug # or use id, there's no need for two unique identifiers

def my_view(request, slug, id):
    page = get_object_or_404(pk=id)

类似于:

def my_view(request, **kwargs):
    slug = kwargs.get('slug')
    page = get_object_or_404(Page, slug=slug)

由于复制粘贴,您的缩进可能很糟糕,您可能想要编辑您的帖子。查看 django 的文档以了解有关 url 捕获组的想法

于 2012-07-23T14:07:39.563 回答