【问题标题】:Link a view to a link Django将视图链接到链接 Django
【发布时间】:2012-12-13 17:10:59
【问题描述】:

我正在 Django 中制作一个简单的博客应用程序作为学习练习。我可以添加帖子,在首页上看到它们,所以到目前为止它正在工作。我遇到的问题是创建一个在单独的页面上显示整个帖子的视图。我想单击标题,然后转到具有标题和正文的 url /post/primary 键的页面。当我点击链接时,我得到一个只有 base.html 的页面。不知道我在哪里遗漏了什么,这里是 urls.py、views.py 和 post.html:

urls.py from django.conf.urls 导入模式,包含,url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('blog.views',
    url(r'^$', 'frontpage'),
    url(r'^post/(\d+)/$', 'post'),
)

urlpatterns += patterns('',
    url(r'^admin/', include(admin.site.urls)),
) 

from django.core.paginator import Paginator, InvalidPage, EmptyPage
from django.core.urlresolvers import reverse
from django.shortcuts import get_object_or_404, render_to_response
from blog.models import *

views.py

def frontpage(request):
    posts = Post.objects.all().order_by("-created")
    paginator = Paginator(posts, 5)

    page = request.GET.get('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, pk):
    """Single Post"""
    post = Post.objects.get(pk = pk)
    d = dict(post=post, user=request.user)
    return render_to_response("post.html", d)

post.html

{% extends "base.html" %}

{% block content %}
    <div class ="main">
        <ul>
            {% for post in posts.object_list %}
                <div class = "title">{{ post.title }}</div>
                <ul>
                    <div class="time"> {{ post.created }}</div>
                    <div class ="body"> {{ post.body|linebreaks }}</div>
                </ul>
            {% endfor %}
        </ul>
    </div>
{% endblock %}

提前感谢您的帮助。

【问题讨论】:

  • 你的base.html是什么样的?

标签: python database django


【解决方案1】:

我假设 page.html 实际上是您在 yoru 代码示例中的 post.html???您不再有帖子集合,而是只有 1 个帖子

这需要改变:(循环通过你的帖子)

{% extends "base.html" %}

{% block content %}
    <div class ="main">
        <ul>
            {% for post in posts.object_list %}
                <div class = "title">{{ post.title }}</div>
                <ul>
                    <div class="time"> {{ post.created }}</div>
                    <div class ="body"> {{ post.body|linebreaks }}</div>
                </ul>
            {% endfor %}
        </ul>
    </div>
{% endblock %}

类似于(仅显示您的单曲post):

{% extends "base.html" %}

{% block content %}
    <div class ="main">
        {{ post.title }}
        {{ post.created }}
        {{ post.body }}      
    </div>
{% endblock %}

【讨论】:

  • 把它改成了post.hmtl,就是这样,我从首页视图复制了字段,所以我忘了删除遍历所有帖子的部分。感谢您的帮助。
【解决方案2】:

您必须更改 urls.py 才能转到 url /post/primary 键处的页面。

urlpatterns = 模式('blog.views', 网址(r'^$','首页'), url(r'^post/(?P\d+)/$', 'post'), )

【讨论】:

    猜你喜欢
    • 2014-12-20
    • 2015-03-24
    • 2014-02-03
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 2014-11-18
    • 2016-04-07
    相关资源
    最近更新 更多