Django开发-2

模板修改

视图

  • 修改views.py
...
from .models import Post
def index(request):
    post_list = Post.objects.all().order_by("-create_time") #按照创建时间降序排列
    context = {'post_list':post_list}
    return render(request, 'blog/index.html', context=context)

模板

文章列表

  • 删除index.html的多余article,只保留1个

修改模板

遍历博客

                {% for post in post_list %}
                <article class="post post-{{ post.id }}">
                    ...
                </article>
                {% empty %}
                    <div class="no-post">暂时没有发布的文章!</div>
                {% endfor %}

标题

<h1 class="entry-title">
    <a href="single.html">{{ post.title }}</a>
</h1>

详情

<div class="entry-meta">
    <span class="post-category"><a href="#">{{ post.category.name }}</a></span>
    <span class="post-date"><a href="#"><time class="entry-date"
                                              datetime="{{ post.create_time }}">{{ post.create_time }}</time></a></span>
    <span class="post-author"><a href="#">{{ post.author.username }}</a></span>
...
</div>

摘要

<div class="entry-content clearfix">
    <p>{{ post.excerpt }}</p>
    ...

后台

注册模型

  • 修改blog/admin.py
from .models import Category,Tag,Post

admin.site.register(Category)
admin.site.register(Tag)
admin.site.register(Post)

汉化

  • 应用汉化, apps.py
class BlogConfig(AppConfig):
    name = 'blog'
    verbose_name = '博客'
  • 模型汉化, models.py
class Category(models.Model):
...
    class Meta:
        verbose_name='类别'
        verbose_name_plural = verbose_name  #复数形式
class Tag(models.Model):
...
    class Meta:
        verbose_name='标签'
        verbose_name_plural = verbose_name  #复数形式
class Post(models.Model):
...
    class Meta:
        verbose_name='文章'
        verbose_name_plural = verbose_name  #复数形式
  • 返回结果(对象->字符串)
class Category(models.Model):
...
    def __str__(self):
        return self.name
class Tag(models.Model):
...
    def __str__(self):
        return self.name
class Post(models.Model):
...
    def __str__(self):
        return self.title

定制后台

  • 只显示需要的字段
admin.site.register(Category)
admin.site.register(Tag)

class PostAdmin(admin.ModelAdmin):
    list_display = ['title','create_time','modified_time','category','author']

admin.site.register(Post,PostAdmin)

  • 控制表单展示的字段和填充当前用户作为作者

    admin.py

...
class PostAdmin(admin.ModelAdmin):
    list_display = ['title','create_time','modified_time','category','author']
    fields = ['title','body','excerpt','category','tags']
    
    def save_model(self, request, obj, form, change):
        obj.author = request.user #当前用户赋值
        super().save_model(request, obj, form, change)
...
  • 自动填充创建时间和修改时间

    models.py

from django.utils import timezone
class Post(models.Model):
...
    create_time = models.DateTimeField(verbose_name='创建时间',default=timezone.now)
...
    def save(self, *args, **kwargs):
        self.modified_time = timezone.now()  #修改时间的自动调整
        super().save(*args,**kwargs)

详情页

URL映射

  • url绑定

    blog/urls.py

    urlpatterns = [
        path(r'', views.index, name='index'),
        path('posts/<int:pk>', views.detail, name='detail')
    ]
    
  • 视图

    views.py

    from django.shortcuts import render,get_object_or_404
    ...
    def detail(request,pk):
        post = get_object_or_404(Post, pk=pk)
        context = {'post':post}
        return render(request,'blog/detail.html',context)
    
  • 模板

    • 把single.html拷贝到templates/blog目录,更名为detail.html

    • blog/urls.py增加app_name

      app_name = 'blog'
      ...
      
    • index.html

      <header class="entry-header">
          <h1 class="entry-title">
              <a href="{{ post.get_absolute_url }}">{{ post.title }}</a>
          </h1>
      
    • models.py

      from django.urls import reverse
      ...
      class Post(models.Model):
      ...
          def get_absolute_url(self):
              return reverse('blog:detail', kwargs={'pk':self.pk})
      

模板继承

模板页

  • 创建templates/base.html,把index.html的内容拷贝过来,修改如下:

    <div class="content-body">
    ...
                <main class="col-md-8">
                    {% block main %}
                    {% endblock main %}
                </main>
                <aside class="col-md-4">
                    {% block aside %}
                    {% endblock aside %}
                </aside>
    ...
    </div>
    

主页继承模板

  • 修改index.html

    {% extends 'base.html' %}
    {% block main %}
                    {% for post in post_list %}
                    <article class="post post-{{ post.id }}">
                       ...
                    </article>
                    {% empty %}
                        <div class="no-post">暂时没有发布的文章!</div>
                    {% endfor %}
    
                    <div class="pagination">
                    ...
                    </div>
    {% endblock main %}
    
    

详情页继承模板

{% extends 'base.html' %}
{% block main %}
                <article class="post post-{{ post.pk }}">
                    <header class="entry-header">
                        <h1 class="entry-title">{{ post.title }}</h1>
                        <div class="entry-meta">
                            <span class="post-category"><a href="#">{{ post.category.name }}</a></span>
                            <span class="post-date"><a href="#"><time class="entry-date"
                                                                      datetime="{{ post.create_time }}">{{ post.create_time }}</time></a></span>
                            <span class="post-author"><a href="#">{{ post.author.username }}</a></span>
                            <span class="comments-link"><a href="#">4 评论</a></span>
                            <span class="views-count"><a href="#">588 阅读</a></span>
                        </div>
                    </header>
                    <div class="entry-content clearfix">
                        {{ post.body }}
                    </div>
                </article>
                <section class="comment-area" id="comment-area">
                    ...
{% endblock main %}
{% block aside %}
                <div class="widget widget-content">
                    ...
                </div>
{% endblock aside %}

  • 静态文件处理

    把/static 移动到/blog目录下,并重启runserver

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容