Day_08
项目列表
1.展示项目
- 从数据库中获取星标、我创建的、我参与的数据
def project_list(request):
'''项目列表'''
if request.method == "GET":
project_dict = {"star": [], "my": [], "join": []}
# 我创建的所有的项目
my_project_list = models.Project.objects.filter(creator=request.tracer.user)
for row in my_project_list:
if row.star:
project_dict["star"].append(row)
else:
project_dict["my"].append(row)
# 我参与的所有项目
join_project_list = models.ProjectUser.objects.filter(user=request.tracer.user)
for item in join_project_list:
if item.star:
project_dict["star"].append(item.project)
else:
project_dict["join"].append(item.project)
form = ProjectModelForm(request)
return render(request, "project_list.html", {"form": form,"project_dict":project_dict})
- 在前端页面展示(修改部分代码)
<style>
.project {
margin-top: 10px;
}
.panel-info{
margin-top: 10px;
}
.panel-body {
padding: 0;
display: flex;
flex-direction: row;
justify-content: left;
align-items: flex-start;
flex-wrap: wrap;
}
.panel-body > .item {
border-radius: 6px;
width: 228px;
border: 1px solid #dddddd;
margin: 20px 10px;
}
.panel-body > .item:hover {
border: 1px solid #f0ad4e;
}
.panel-body > .item > .title {
height: 104px;
color: white;
display: flex;
justify-content: center;
align-items: center;
border-top-left-radius: 6px;
border-top-right-radius: 6px;
font-size: 15px;
text-decoration: none;
}
.panel-body > .item > .info {
padding: 10px 10px;
display: flex;
justify-content: space-between;
border-bottom-left-radius: 6px;
border-bottom-right-radius: 6px;
color: #8c8c8c;
}
.panel-body > .item > .info a {
text-decoration: none;
}
.panel-body > .item > .info .fa-star {
font-size: 18px;
}
.color-radio label {
margin-left: 0;
padding-left: 0;
}
.color-radio input[type="radio"] {
display: none;
}
.color-radio input[type="radio"] + .cycle {
display: inline-block;
height: 25px;
width: 25px;
border-radius: 50%;
border: 2px solid #dddddd;
}
.color-radio input[type="radio"]:checked + .cycle {
border: 2px solid black;
}
</style>
{% block content %}
<div class="container-fluid project">
<a class="btn btn-primary" data-toggle="modal" data-target="#addModal"><span
class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span> 新建项目
</a>
<div class="panel panel-info">
<div class="panel-heading"><i class="fa fa-star" aria-hidden="true"></i>星标项目</div>
<div class="panel-body">
{% for item in project_dict.star %}
<div class="item">
<a href="#" class="title"
style="background-color: {{ item.get_color_display }};">{{ item.name }}</a>
<div class="info">
<div>
<a href="#">
<i class="fa fa-star" aria-hidden="true" style="color: #f0ad4e;"></i>
</a>
<span>{{ item.creator.username }}</span>
</div>
<div>
<i class="fa fa-user-o" aria-hidden="true"></i>
<span>{{ item.join_count }}</span>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
<div class="panel panel-success">
<div class="panel-heading"><i class="fa fa-user-circle" aria-hidden="true"></i>我创建的</div>
<div class="panel-body">
{% for item in project_dict.my %}
<div class="item">
<a href="#" class="title"
style="background-color: {{ item.get_color_display }};">{{ item.name }}</a>
<div class="info">
<div>
<a href="#">
<i class="fa fa-star" aria-hidden="true" style="color: #d5d5d5"></i>
</a>
<span>{{ item.creator.username }}</span>
</div>
<div>
<i class="fa fa-user-o" aria-hidden="true"></i>
<span>{{ item.join_count }}</span>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
<div class="panel panel-danger">
<div class="panel-heading"><i class="fa fa-users" aria-hidden="true"></i>我参与的</div>
<div class="panel-body">
{% for item in project_dict.join %}
<div class="item">
<a href="#" class="title"
style="background-color: {{ item.get_color_display }};">{{ item.name }}</a>
<div class="info">
<div>
<a href="#">
<i class="fa fa-star" aria-hidden="true" style="color: #d5d5d5"></i>
</a>
<span>{{ item.creator.username }}</span>
</div>
<div>
<i class="fa fa-user-o" aria-hidden="true"></i>
<span>{{ item.join_count }}</span>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
<!-- Modal -->
<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">新建项目</h4>
</div>
<div class="modal-body">
<form id="addForm">
{% csrf_token %}
{% for field in form %}
<div class="form-group">
<label for="{{ field.id_for_label }}">{{ field.label }}</label>
{{ field }}
<span class="error-msg"></span>
</div>
{% endfor %}
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取 消</button>
<button type="button" class="btn btn-primary" id="btnSubmit">保 存</button>
</div>
</div>
</div>
</div>
{% endblock %}
效果展示

2.星标项目
- 2.1 添加星标
- 我创建的项目:project.star = True
- 我参与的项目:projectUser.star = True
- 2.2 移除星标
- 我创建的项目:project.star = False
- 我参与的项目:projectUser.star = False
![image]()
视图函数
def project_star(request,project_type,project_id):
"""星标项目"""
if project_type == "my":
models.Project.objects.filter(id=project_id,creator=request.tracer.user).update(star=True)
return redirect("project_list")
if project_type == "join":
models.ProjectUser.objects.filter(project_id=project_id,user=request.tracer.user).update(star=True)
return redirect("project_list")
return HttpResponse("请求错误!")
def project_unstar(request,project_type,project_id):
"""取消星标"""
if project_type == "my":
models.Project.objects.filter(id=project_id,creator=request.tracer.user).update(star=False)
return redirect("project_list")
if project_type == "join":
models.ProjectUser.objects.filter(project_id=project_id,user=request.tracer.user).update(star=False)
return redirect("project_list")
return HttpResponse("请求错误!")
前端页面
{% block content %}
<div class="container-fluid project">
<a class="btn btn-primary" data-toggle="modal" data-target="#addModal"><span
class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span> 新建项目
</a>
<div class="panel panel-info">
<div class="panel-heading"><i class="fa fa-star" aria-hidden="true"></i>星标项目</div>
<div class="panel-body">
{% for item in project_dict.star %}
<div class="item">
<a href="#" class="title"
style="background-color: {{ item.value.get_color_display }};">{{ item.value.name }}</a>
<div class="info">
<div>
<a href="{% url 'project_unstar' project_type=item.type project_id=item.value.id %}">
<i class="fa fa-star" aria-hidden="true" style="color: #f0ad4e;"></i>
</a>
<span>{{ item.value.creator.username }}</span>
</div>
<div>
<i class="fa fa-user-o" aria-hidden="true"></i>
<span>{{ item.value.join_count }}</span>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
<div class="panel panel-success">
<div class="panel-heading"><i class="fa fa-user-circle" aria-hidden="true"></i>我创建的</div>
<div class="panel-body">
{% for item in project_dict.my %}
<div class="item">
<a href="#" class="title"
style="background-color: {{ item.get_color_display }};">{{ item.name }}</a>
<div class="info">
<div>
<a href="{% url 'project_star' project_type='my' project_id=item.id %}">
<i class="fa fa-star" aria-hidden="true" style="color: #d5d5d5"></i>
</a>
<span>{{ item.creator.username }}</span>
</div>
<div>
<i class="fa fa-user-o" aria-hidden="true"></i>
<span>{{ item.join_count }}</span>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
<div class="panel panel-danger">
<div class="panel-heading"><i class="fa fa-users" aria-hidden="true"></i>我参与的</div>
<div class="panel-body">
{% for item in project_dict.join %}
<div class="item">
<a href="#" class="title"
style="background-color: {{ item.get_color_display }};">{{ item.name }}</a>
<div class="info">
<div>
<a href="{% url 'project_star' project_type="join" project_id=item.id %}">
<i class="fa fa-star" aria-hidden="true" style="color: #d5d5d5"></i>
</a>
<span>{{ item.creator.username }}</span>
</div>
<div>
<i class="fa fa-user-o" aria-hidden="true"></i>
<span>{{ item.join_count }}</span>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
<!-- Modal -->
<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">新建项目</h4>
</div>
<div class="modal-body">
<form id="addForm">
{% csrf_token %}
{% for field in form %}
<div class="form-group">
<label for="{{ field.id_for_label }}">{{ field.label }}</label>
{{ field }}
<span class="error-msg"></span>
</div>
{% endfor %}
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取 消</button>
<button type="button" class="btn btn-primary" id="btnSubmit">保 存</button>
</div>
</div>
</div>
</div>
{% endblock %}
3.添加项目:颜色选择
自定义颜色选择插件
ProjectModelForm中:from web.forms.widgets import ColorRadioSelect
将color原本的forms.RadioSelect修改为自定义ColorRaioSelect

widgets中:

创建两个Rdio.html和Radio_option.html自定义模板:
{% with id=widget.attrs.id %}
<div{% if id %} id="{{ id }}"{% endif %}{% if widget.attrs.class %} class="{{ widget.attrs.class }}"{% endif %}>
{% for group, options, index in widget.optgroups %}
{% for option in options %}
<label {% if option.attrs.id %} for="{{ option.attrs.id }}"{% endif %} >
{% include option.template_name with widget=option %}
</label>
{% endfor %}
{% endfor %}
</div>
{% endwith %}
{% include "django/forms/widgets/input.html" %}
<span class="cycle" style="background-color:{{ option.label }}"></span>
- 效果
![image]()
**酷宝建议:有不懂的代码,一定要多看几遍,从最开始的导入到应用,梳理好逻辑关系,脑袋不发昏



浙公网安备 33010602011771号