04 使用模板显示内容

技术交流QQ群:1027579432,欢迎你的加入!

本教程来源于B站杨仕航Django2.0开发视频教程,如需转载,必须注明来源!

1.查看文章页面

  • 如何通过统一的一个处理方法获取每一篇文章?解决方法:利用文章的唯一标识
  • 具体实现:打开article文件夹下的migrations/0001_initial.py,我们可以看到区别每篇文章的字段是id。因此,在article文件夹下的views.py文件中定义视图文件,如下所示:
    from django.http import HttpResponse
    # Create your views here.
    
    
    def article_detail(request, article_id):
        return HttpResponse('文章id: %s' % article_id)
    
  • 在mysite文件夹下的urls.py文件中添加每篇文章的路由地址,如下所示:
    from article.views import article_detail
    
    urlpatterns = [
        path('article/<int:article_id>', article_detail, name="article_detail"),
    ]
    
    

2.objects

  • 模型的objects是获取或操作模型的对象,具体的方法如下:
    Article.objects.get(条件)
    Article.objects.all()
    Article.objects.filter(条件)
    
  • 在article文件夹下的views.py文件中写入需要在前端页面上展示的字段,如下所示:
    from django.shortcuts import render
    from django.http import HttpResponse, Http404
    from .models import Article
    # Create your views here.
    
    
    def article_detail(request, article_id):
        try:
            article = Article.objects.get(id=article_id)
        except Article.DoesNotExist:
            raise Http404('Not Exist')
    
        return HttpResponse('<h2>文章标题: %s</h2> <br /> 文章内容: %s ' % (article.title, article.content))
    

3.使用模板

  • 使用模板的目的:前端页面和后端代码分离,减少耦合性。优化上一步中article文件夹下的views.py文件前后端代码的耦合性。
  • 具体步骤如下:
    • 在article文件夹下创建templates文件夹,里面存放前端页面所需要的html文件;
    • 在templates文件夹下创建article_detail.html文件,然后对其进行编辑;
      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>Document</title>
      </head>
      <body>
          <h2>{{ article_obj.title }}</h2>
          <hr>
          <p>{{ article_obj.content }}</p>
      </body>
      </html>
      
    • 同时,对article文件夹下的views.py文件中代码进行优化,优化的结果是:
      from django.shortcuts import render_to_response, get_object_or_404
      from .models import Article
      # Create your views here.
      
      
      def article_detail(request, article_id):
          article = get_object_or_404(Article, pk=article_id)
          context = {}
          context['article_obj'] = article
          return render_to_response('article_detail.html', context)
      

4.获取文章列表

文章列表.png
  • 在article文件夹下的views.py文件中添加如下代码,实现获取文章列表的功能。
    def article_list(request):
        articles = Article.objects.all()
        context = {}
        context['articles'] = articles
        return render_to_response('article_list.html', context)
    
  • 在templates文件夹下创建article_detail.html文件,然后对其进行编辑;
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <!-- {% 这是模板标签 %} -->
        {% for article in articles%}
            <a href="{% url 'article_detail' article.pk %}">{{ article.title }}</a>
        {% endfor %}
    </body>
    </html>
    
  • 在mysite文件夹下的urls.py文件中添加文章列表article_list的路由地址,如下所示:
    from article.views import article_detail, article_list
    urlpatterns = [
        path('admin/', admin.site.urls),  # 根路由(后台管理网址):www.baidu.com/admin/
        path('', views.index),   # www.baidu.com
        path('article/<int:article_id>', article_detail, name="article_detail"),
        path('article/', article_list, name="article_list"),
    ]
    
  • 打开浏览器,输入网址http://localhost:8000/article/,注意:此url中并没有指定哪一篇文章的article_id就可以获得所有的文章信息,如下所示:
    文章列表前端页面.png

5.总urls包含app的urls

总urls包含app的urls.png
  • 打开mysite文件夹下的全局路由文件urls.py,将如下代码剪切到article文件夹下的urls.py(如果没有该文件,需手动新建此文件),
    # localhost:8000/article/1
    path('<int:article_id>', article_detail, name="article_detail"),
    # localhost:8000/article/
    path('', article_list, name="article_list"),
    
  • 对article文件夹下新建的urls.py文件进行编辑,添加如下内容:
    from django.urls import path
    from .import views
    
    urlpatterns = [
        path('article/<int:article_id>', views.article_detail, name="article_detail"),
        path('article/', views.article_list, name="article_list"),
    
    ]
    
  • 接着,打开mysite文件夹下的全局路由文件urls.py,在当中引用article这个app的路由文件,添加如下内容:
    from django.urls import path, include
    
    urlpatterns = [
        # .....
        path('article/', include('article.urls')),
    ]
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352