技术交流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.获取文章列表
- 在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就可以获得所有的文章信息,如下所示:
5.总urls包含app的urls
- 打开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')), ]