• Django+Bootstrap+Mysql 搭建个人博客(二)


    2.1.博客首页设计

    (1)settings.py

    MEDIA_ROOT = os.path.join(BASE_DIR,'media').replace("//","/")
    MEDIA_URL = '/media/'

    (2)website/urls

    添加图片的url

    from django.conf.urls import url,include
    from django.contrib import admin
    from django.conf import settings
    from django.conf.urls.static import static
    
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^blog/',include('blog.urls') ),
    
    ] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT )        #添加图片的url

    (3)blog/models.py

    添加两个方法

    class Entry(models.Model):
        .
        .
        .
         def get_absolute_url(self):
            #获取当前博客详情页的url
            return reverse("blog:blog_detail",kwargs={"blog_id":self.id})     #app名字,详情页url的别名,参数是当前博客的id
    
        def increase_visiting(self):
            #访问量加1
            self.visiting += 1
            self.save(update_fields=['visiting'])   #只保存某个字段

    (4)views.py

    from django.shortcuts import render
    from . import models
    
    def index(request):
        entries = models.Entry.objects.all()
    
        return render(request,'blog/index.html',locals())
    
    
    def detail(request,blog_id):
        entry = models.Entry.objects.get(id=blog_id)
        entry.increase_visiting()
    
        return render(request,'blog/detail.html',locals())

    (5)index.py

    {% extends 'blog/base.html' %}
    
    {% block title %}博客首页{% endblock %}
    
    {% block content %}
    
        <div class="container">
            <div class="row">
                <div class="col-md-9">
                    {% for entry in entries %}
                        <h2><a href="{{ entry.get_absolute_url }}">{{ entry.title }}</a></h2> <br>
                        {% if entry.img %}
                            <img src="{{ entry.img.url }}" width="60%" height="270px"/>
                        {% endif %}
                        {% if entry.abstract %}
                            <p>{{ entry.abstract }}</p>
                        {% else %}
                            <p>{{ entry.body|truncatechars:180 }}</p>
                        {% endif %}
                        <p>
                            <span>作者:{{ entry.author }}</span>
                            <span>&nbsp;&nbsp;&nbsp;&nbsp;发布时间:{{ entry.created_time }}</span>
                            <span>&nbsp;&nbsp;&nbsp;&nbsp;阅读数:{{ entry.visiting }}</span>
                        </p>
                    {% endfor %}
    
                </div>
    
            </div>
    
        </div>
    
    
    {% endblock %}

    (6)detail.html

    {% extends 'blog/base.html' %}
    
    {% block title %}博客详情页{% endblock %}
    
    {% block content %}
        博客{{ blog_id }}的详情页
    {% endblock %}

    2.2.博客详情页面

    detail.html

    {% extends 'blog/base.html' %}
    
    {% block title %}博客详情页{% endblock %}
    
    {% block content %}
        <div class="container">
            <div class="row">
                <div class="col-md-9">
                    <h1>{{ entry.title }}</h1>
                    <p>
                        <strong>{{ entry.author }}</strong>
                        &nbsp;&nbsp;&nbsp;&nbsp;{{ entry.created_time|date:'Y年m月d日' }}
                        &nbsp;&nbsp;&nbsp;&nbsp;分类:
                        {% for category in entry.category.all %}
                            &nbsp;&nbsp;<a href="#">{{ category.name }}</a>
                        {% endfor %}
    
                        &nbsp;&nbsp;&nbsp;&nbsp;标签:
                        {% for tag in entry.tags.all %}
                            &nbsp;&nbsp;<a href="#">{{ tag.name }}</a>
                        {% endfor %}
    
                        &nbsp;&nbsp;&nbsp;&nbsp;浏览量:
                                &nbsp;&nbsp;{{ entry.visiting }}
    
                        {% if entry.img %}
                            <img src="{{ entry.img.url }}" width="60%" height="270px"/>
                        {% endif %}
                        <hr />
                        <p>
                            {{ entry.body }}
                        </p>
                    </p>
                </div>
            </div>
        </div>
    
    {% endblock %}

    2.3.Markdown排版、语法高亮和生成目录

    (1)安装模块

    pip install markdown
    
    pip install pygments

    (2)views.py

    import markdown,pygments
    
    def detail(request,blog_id):
        entry = models.Entry.objects.get(id=blog_id)
        md = markdown.Markdown(extensions=[
            'markdown.extensions.extra',
            'markdown.extensions.codehilite',
            'markdown.extensions.toc',
        ])
        entry.body = md.convert(entry.body)
        entry.toc = md.toc
        entry.increase_visiting()
    
        return render(request,'blog/detail.html',locals())

    (3)detail.html

    把github.css放到blog/css里面,detail.html引用样式

    {% extends 'blog/base.html' %}
    {% load staticfiles %}
    
    {% block title %}博客详情页{% endblock %}
    {% block css %}
        <link rel="stylesheet" href="{% static 'blog/css/github.css' %}">
    {% endblock %}

    标签和正文都加salf

     (4)后台添加博客

    Markdown语法测试篇

    ## 1.python语言介绍
       编程语言主要从以下几个角度进行分类:编译型,静态型,动态性,强类型定义语言和弱类型定义语言
    
     - 编译型:有一个负责翻译的程序来对我们的源代码进行转换,生成对应的可执行代码,这个过程就是编译(Compile),而负责编译的程序就被称为编译器(Compiler)
    
     - 通常我们所说的动态语言,静态语言是指动态类型语言和静态类型语言
     
    
    ## 2.python的优缺点
    
     - 优点:简单、开发效率高、高级语言、可移植性、可扩展性、可嵌入性
    
     - 缺点:速度慢,但是相对的、代码不能加密、线程不能利用多CPU问题
    
    ## 3.高阶函数
    ```python
    def func():
        print('in the func')
        return foo()
    def foo():
        print('in the foo()')
        return 666
    
    res = func()
    print(res)
    ```

    前端显示效果:

  • 相关阅读:
    LeetCode 485. Max Consecutive Ones
    LeetCode 367. Valid Perfect Square
    LeetCode 375. Guess Number Higher or Lower II
    LeetCode 374. Guess Number Higher or Lower
    LeetCode Word Pattern II
    LeetCode Arranging Coins
    LeetCode 422. Valid Word Square
    Session 共享
    java NIO
    非阻塞IO
  • 原文地址:https://www.cnblogs.com/derek1184405959/p/9061860.html
Copyright © 2020-2023  润新知