1

我有一些 Python 的背景知识,并且一直在尝试编写一些 Django 教程,因为虽然我了解了大致的概念,但我仍然是初学者,所以我认为遵循一些示例是一种很好的做法。

我目前正在研究如何构建一个简单的博客应用程序的“Django by example”教程(这里有一个链接: http: //lightbird.net/dbe/blog.html),我已经到达了我的部分'正在处理每个帖子的页面。

他在那里用重定向链接做了一件非常奇怪的事情,所以我认为最好按照 Django 文档对它的民意调查应用程序所做的事情。事情就是这样 - 它根本不起作用。不仅如此,我没有收到错误,所以我无法判断出了什么问题,而真正发生的事情对我来说绝对是零意义。

所以这是我的 urls.py 代码:

urlpatterns = patterns('',
    url(r'^blog/', 'blog.views.main'),
    url(r'^blog/(?P<post_id>\d+)/$', 'blog.views.post'),
)

这是我的views.py 代码:

def main(request):
    """Main listing."""
    posts = Post.objects.all().order_by("-created")
    paginator = Paginator(posts, 2)

    try: page = int(request.GET.get("page", '1'))
    except ValueError: page = 1

    try:
        posts = paginator.page(page)
    except (InvalidPage, EmptyPage):
        posts = paginator.page(paginator.num_pages)

    return render_to_response("list.html", dict(posts=posts, user=request.user))

def post(request, post_id):
    post = Post.objects.get(pk=post_id)
    d = dict(post=post, user=request.user)
    return render_to_response("post.html", d)

这是(我的一部分)html代码:

{% for post in posts.object_list %}
    <div class="title">
        <a href="/blog/{{ post.id }}/">{{ post.title }}</a></div>
            <ul>
                <div class="time">{{ post.created }}</div>
                <div class="body">{{ post.body|linebreaks }}</div>
            </ul>
{% endfor %}

所以我的主页看起来不错,它的开发 url 现在是 127.0.0.1:8000/blog,当我点击帖子标题(比如帖子编号 3)时,它会转到 127.0.0.1:8000/blog/3,就像它应该的那样。

但它并没有得到新的“post.html”模板,而是停留在该死的主页上。尝试更改 url 并直接找到它也不起作用。

就好像 url 模式查找并找到了第一个选项,说“是的,足够好”并且没有费心去运行其他选项。奇怪的是,如果我更改 urls.py 中的帖子视图 url 并去掉“博客”部分,如下所示:

url(r'^(?P<post_id>\d+)/$', 'blog.views.post')

它太棒了。但我想在我的网址中保留“博客”部分,无论如何我都不知道自己做错了什么,所以即使我只是“随心所欲”,我仍然想尝试了解发生了什么在这。

4

1 回答 1

1

我认为您应该$在第一个网址的末尾添加一个:

urlpatterns = patterns('',
    url(r'^blog/$', 'blog.views.main'),
    url(r'^blog/(?P<post_id>\d+)/$', 'blog.views.post'),
)

或者您可以将第二个网址放在第一个网址之前。Django 正在从上到下寻找匹配项,并将选择第一个匹配项。

urlpatterns = patterns('',
    url(r'^blog/(?P<post_id>\d+)/$', 'blog.views.post'),
    url(r'^blog/$', 'blog.views.main'),
)
于 2013-01-13T13:08:48.720 回答