目录
一、启用media
1、URL设置
2、settings.py配置
二、url
三、upload.py 新增upload_modelform方法
四、form.py新增UpModelForm
五、创建city表
六、创建city_list.html
接上一篇《django项目实战十三(django+bootstrap实现增删改查)进阶混合数据form上传图片》
知识点:1、media启用
一、启用media
在 Django 的开发中有两个特殊的文件夹:
- static: 存放静态文件
 - media:存放用户上传的数据,但是使用 media 需要做一些配置
 
1、URL设置
re_path(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}, name='media'), 

2、settings.py配置

MEDIA_ROOT = os.path.join(BASE_DIR, "media")
MEDIA_URL = '/media/'
 
这样设置之后,上一篇可以修改一下
二、url


三、upload.py 新增upload_modelform方法
def upload_modelform(request):
    """modelform上传"""
    title = "ModelForm上传"
    if request.method == 'GET':
        form = UpModelForm()
        # print(form)
        return render(request, 'upload_form.html', {"form": form, "title": title})
    form = UpModelForm(data=request.POST, files=request.FILES)
    if form.is_valid():
        form.save()
        redirect('/city/list/')
    return render(request, 'upload_form.html', {"form": form, "title": "form上传"}) 
四、form.py新增UpModelForm
class UpModelForm(BootStrapModelForm):
    #  img 字段不使用bootstrap样式
    bootstrap_exclude_fields = ['img']
    class Meta:
        model = models.City
        fields = "__all__" 
五、创建city表
class City(models.Model):
    """城市"""
    name = models.CharField(verbose_name='名称', max_length=32)
    count = models.IntegerField(verbose_name='人口')
    # FileField本质上也是CharField,FileField自动保存数据
    img = models.FileField(verbose_name='LOGO', max_length=128, upload_to='city/')
 
六、创建city_list.html
{% extends 'layout.html' %}
{% block title %}
    <title>城市列表</title>
{% endblock %}
{% block content %}
    <div class="container">
        <div style="margin-bottom: 10px">
            <a class="btn btn-success" href="/upload/modelform/">
                <span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span>
                新建
            </a>
            <div style="float: right;width: 300px">
                <form method="get">
                    <div class="input-group">
                        <input type="text" name="q" class="form-control" placeholder="请输入城市名称"
                               value="{{ search_data }}">
                        <span class="input-group-btn">
                            <button class="btn btn-default" type="submit">
                                <span class="glyphicon glyphicon-search" aria-hidden="true"></span>
                            </button>
                        </span>
                    </div>
                </form>
            </div>
        </div>
        <div class="bs-example" data-example-id="panel-without-body-with-table">
            <div class="panel panel-default">
                <!-- Default panel contents -->
                <div class="panel-heading">
                    <span class="glyphicon glyphicon-th-list" aria-hidden="true"></span>
                    城市列表
                </div>
                <!-- Table -->
                <table class="table table-bordered">
                    <thead>
                    <tr>
                        <th>序号</th>
                        <th>LOGO</th>
                         <th>名称</th>
                         <th>人口</th>
                        <th>操作</th>
                    </tr>
                    </thead>
                    <tbody>
                    {% for obj in query_set %}
                        <tr>
                            <th scope="row">{{ obj.id }}</th>
                            <td>
                                <img src="/media/{{ obj.img }}" style="height: 80px;">
                            </td>
                            <td>{{ obj.name }}</td>
                            <td>{{ obj.count }}</td>
                        </tr>
                    {% endfor %}
                    </tbody>
                </table>
            </div>
        </div>
        <ul class="pagination">
            {{ page_string }}
        </ul>
    </div>
{% endblock %}
 

 

















