003.使用模板显示内容

1.创建文章

在项目管理界面添加3个文章,标题分别为1,2,3并输入对应内容如:111,222,333。添加后管理界面如下:
后台管理

2.访问文章信息

打开article文件下的views.py输入以下内容:

from django.shortcuts import render
from django.http import HttpResponse


# Create your views here.
def article_detail(request, artticle_id):
    return HttpResponse("文章id:%d", artticle_id)

页面创建完成后在urls.py中加入地址:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', view.index),
    path('article/<int:article_id>', article_detail), name='article_detail'
]

其中 <int:article_id>表示传进来的变量为int类型变量名为article_id。name='article_detail’为别名。


在项目目录运行服务,并在浏览器地址输入对应地址,如:
http://127.0.0.1:8000/article/+任意数字,即可输出对应数字。
此时输入的值为地址传递的值,并没有与后台对应文章id相对应。
现在来对后台的数据进行链接
在views.py文件中修改内容。

from .models import Article

# Create your views here.
def article_detail(request, article_id):
    article = Article.objects.get(id=article_id)
    return HttpResponse("<h2>文章标题:%s</h2> <br> 文章内容:%s" % (article.title, article.content))

此时,传递进来的文章id与后台文章相对应,在浏览器输入对应id地址即可输出对应文章id和内容,若id不存在就会相应报错。

注意: 在输出内容时,用 \n 并不能实现换行,因为时html所以要使用
来换行。同理,在标题前加上<h2>也为html标签。

3.处理异常

若在浏览器地址中输入了后台中不存在的id,会出现报错,如图:
报错信息
进一步优化,来添加一个处理异常的代码:

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("不存在!")
    return HttpResponse("<h2>文章标题:%s</h2> <br> 文章内容:%s" % (article.title, article.content))

这样,即实现了异常处理,如图:
异常处理

4.前后端分离,降低耦合性

在views.py文件目录下新建文件夹,文件夹名为templates必须为这个文件夹名,在setting.py中有规定:

在该文件夹下创建html文件,定义文件名为article_detail.html,这个名字可自定义。


接下来在views.py中进行修改使其可进行跳转到对应的html页面:
from django.shortcuts import render_to_response
from django.http import Http404
from .models import Article


# Create your views here.
def article_detail(request, article_id):
    try:
        article = Article.objects.get(id=article_id)
        context = {}
        context['article_obj'] = article
        return render_to_response('article_detail.html', context)
    except Article.DoesNotExist:
        raise Http404("不存在!")

使用render_to_response()方法来进行跳转及传递变量。

此时,即实现了前后端分离的效果。

5.代码简化

使用404的另一种表达方式,导入包get_object_or_404
get_object_or_404(klass, *args, **kwargs)
其中,参数含义:
klass
接受一个 Model 类,Manager 或 QuerySet 实例,表示你要对该对象进行查询。
**kwargs
查询条件,格式需要被 get() 和 filter() 接受。


再次修改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)

在get_object_or_404中,pk代表第三个参数的缩写。
这样就完成了代码简化。

6.获取文章列表

首先在templates中创建html文件,这里名为article_list
然后,在views.py中添加函数设置跳转:

def article_list(request):
    articles = Article.objects.all()
    context = {}
    context['articles'] = articles
    return render_to_response('article_list.html', context)

在urls.py中注册页面:

from django.contrib import admin
from django.urls import path
from .import view
from article.views import article_detail, article_list

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', view.index),
    path('article/<int:article_id>', article_detail, name='article_detail'),
    path('article/', article_list, name='article_list')
]

在html中如果单单使用articles会出现以下内容:

是个列表形式,所以要将其进行遍历,这里使用for循环。
在这里使用for循环用此形式:

    {% for article in articles %}
        <p>{{ article.title }}</p>
    {% endfor %}

这样即可达到查看文章列表效果:

7.实现对应链接跳转

在article_list.html中添加以下内容:

{% for article in articles %}
       <a href="{% url 'article_detail' article.pk %}">{{ article.title }}</a>
    {% endfor %}

其中url后面引号里的内容为跳转链接的name的值,是在urls.py中提前设置的,如图:

这样就实现了对应标题跳转对应页面的功能。

8.简化urls.py中的内容

简化urls.py的内容,使用总urls管理app的urls
下面是urls.py的内容:

from django.contrib import admin
from django.urls import path
from .import view
from article.views import article_detail, article_list

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', view.index),
    path('article/<int:article_id>', article_detail, name='article_detail'),
    path('article/', article_list, name='article_list')

一个项目,会有很多页面,如果全都在这个文件下添加,久而久之会变得杂乱,导致不容易管理。
在urlpatterns中第一个path中admin引用了一个文件。所以我们可以利用总的urls来管理其他的urls


在article文件夹中,新建文件 urls.py并编写内容:
from django.urls import path
from . import views


urlpatterns = [
    path('<int:article_id>', views.article_detail, name='article_detail'),
    path('', views.article_list, name='article_list')
]

接着在总的urls.py中添加include:

from django.contrib import admin
from django.urls import path, include
from .import view

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', view.index),
    path('article/', include('article.urls'))
]

这样,在article下的urls.py中的链接前缀就存在一个article/。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值