Django開發(fā)-2

模板修改

視圖

  • 修改views.py
...
from .models import Post
def index(request):
    post_list = Post.objects.all().order_by("-create_time") #按照創(chuàng)建時(shí)間降序排列
    context = {'post_list':post_list}
    return render(request, 'blog/index.html', context=context)

模板

文章列表

  • 刪除index.html的多余article,只保留1個(gè)

修改模板

遍歷博客

                {% for post in post_list %}
                <article class="post post-{{ post.id }}">
                    ...
                </article>
                {% empty %}
                    <div class="no-post">暫時(shí)沒有發(fā)布的文章!</div>
                {% endfor %}

標(biāo)題

<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>
    ...

后臺(tái)

注冊(cè)模型

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

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

漢化

  • 應(yīng)用漢化, apps.py
class BlogConfig(AppConfig):
    name = 'blog'
    verbose_name = '博客'
  • 模型漢化, models.py
class Category(models.Model):
...
    class Meta:
        verbose_name='類別'
        verbose_name_plural = verbose_name  #復(fù)數(shù)形式
class Tag(models.Model):
...
    class Meta:
        verbose_name='標(biāo)簽'
        verbose_name_plural = verbose_name  #復(fù)數(shù)形式
class Post(models.Model):
...
    class Meta:
        verbose_name='文章'
        verbose_name_plural = verbose_name  #復(fù)數(shù)形式
  • 返回結(jié)果(對(duì)象->字符串)
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

定制后臺(tái)

  • 只顯示需要的字段
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)

  • 控制表單展示的字段和填充當(dāng)前用戶作為作者

    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 #當(dāng)前用戶賦值
        super().save_model(request, obj, form, change)
...
  • 自動(dòng)填充創(chuàng)建時(shí)間和修改時(shí)間

    models.py

from django.utils import timezone
class Post(models.Model):
...
    create_time = models.DateTimeField(verbose_name='創(chuàng)建時(shí)間',default=timezone.now)
...
    def save(self, *args, **kwargs):
        self.modified_time = timezone.now()  #修改時(shí)間的自動(dòng)調(diào)整
        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})
      

模板繼承

模板頁

  • 創(chuàng)建templates/base.html,把index.html的內(nèi)容拷貝過來,修改如下:

    <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">暫時(shí)沒有發(fā)布的文章!</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 評(píng)論</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 %}

  • 靜態(tài)文件處理

    把/static 移動(dòng)到/blog目錄下,并重啟runserver

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容