页面跳转

作者: 一块大番薯 | 来源:发表于2018-03-25 15:00 被阅读5次

    按照执行顺序排下来

    点击超链接

    {%for post in post_list %}
    <article class="post post-1">
       <header class="entry-header">
          <h1 class="entry-title">
            <a href="{{ post.make_post_url }}">{{ post.title }}</a>
          </h1>
       </header>
    </article>
    {% endfor %}
    
    • 根据页面 URL 匹配到视图,视图响应出该模板。就是上图代码。
    • psot_list 是从视图中传来(render 函数的 context 参数)
    • 而视图又是从数据库中得到数据 post_list = Post.objects.all()

    构造 URL

    post 对象调用了构造 URL 的方法 make_post_url
    该方法的定义在 Post 模型中。
    reverse 函数根据视图来找到 URL 模式,再传入参数构造 URL。

    app\models.py
    from django.urls import reverse
    class Post(models.Model):
        def make_post_url(self):
            return reverse('app:post', kwargs={'pk': self.pk})
    
    app\urls.py
    app_name = 'app'
    urlpatterns = [
        url(r'^$', views.index, name='index'),
        url(r'^post/(?P<pk>\d+)/$', views.post, name='post')
    ]
    

    调用视图函数

    模板在模型那里构造好 URL 后,就去 urls.py 中匹配到相应的视图。
    url(r'^post/(?P<pk>\d+)/$', views.post, name='post')

    渲染出新模板

    在 views.py 中渲染出新的模板。

    def post(request, pk):
        post = get_object_or_404(Post, pk=pk)
        return render(request, 'app/post.html', context={'post': post})
    

    相关文章

      网友评论

        本文标题:页面跳转

        本文链接:https://www.haomeiwen.com/subject/lhyhcftx.html