编写Django模型类
在应用的文件中,我们首先需要定义两个模型类:fenlei和picture。fenlei表示分类,而picture表示图片。分类是图片的外键,因为一张图片只能属于一个分类,而一个分类可以有多张图片。
```python
from django.db import models
class fenlei():
name (max_length20)
status (defaultTrue)
class Meta:
db_table 'fenlei'
class picture():
title (max_length50, blankTrue)
picpath (upload_to'test')
createtime (auto_now_addTrue, blankTrue)
fl (fenlei, on_delete, blankTrue)
class Meta:
db_table 'picture'
```
在fenlei模型类中,我们定义了name字段和status字段,name字段表示分类的名称,status字段表示分类是否启用。在picture模型类中,我们定义了title字段、picpath字段、createtime字段和fl字段。title字段表示图片的标题,picpath字段表示图片的路径,createtime字段表示图片的创建时间,fl字段表示图片所属的分类,它是一个外键关联fenlei模型类。
创建首页路由
在工程同名文件夹的文件中,我们需要添加到首页的路由,以便访问到首页。
```python
from import admin
from django.urls import path, include
from import static
from import settings
from pic import views
urlpatterns [
path('admin/', ),
path('', _view(), name'home'),
]
urlpatterns static(_URL, document_root_ROOT)
```
这段代码中,我们导入了必要的模块和视图函数。然后,我们定义了一个空的路由,将它绑定到showpic视图函数,命名为home。
使用Bootstrap创建前端导航栏
在模板文件中,我们可以使用Bootstrap框架来创建前端导航栏。
```html
```
这段代码中,我们使用了ul标签和li标签来创建一个无序列表,通过添加class属性和Bootstrap提供的样式类,我们可以实现导航栏的效果。
编写视图函数
在视图函数中,我们需要处理数据并将其传递给模板文件进行渲染。
```python
from import render
from import ListView
from import get_object_or_404
from .models import picture, fenlei
from utils import getpages
class showpic(ListView):
model picture
context_object_name 'pics'
template_name 'pic_'
paginate_by 3
f None
def get_context_data(self, *, object_listNone, kwargs):
context super(showpic,self).get_context_data(kwargs)
paginator ('paginator')
page ('page_obj')
pages getpages(paginator,page)
context['pages']pages
fenlei_list (statusTrue)
context['fenlei_list']fenlei_list
context['f'] self.f
print(context)
return context
def get_queryset(self):
self.f ('f',None)
if self.f:
fen get_object_or_404(fenlei,pkself.f)
return fen.picture_().order_by('-createtime')
else:
pics ().order_by('-createtime')
return pics
```
在这个视图函数中,我们继承了ListView类,并指定了模型类、上下文对象名称、模板文件和分页数量等属性。我们还定义了一个变量f来保存当前所选择的分类。在get_context_data方法中,我们获取分页器和当前页对象,并通过调用自定义的getpages函数计算出页码列表,将其添加到上下文中。同时,我们还需要查询所有启用的分类并将其添加到上下文中。在get_queryset方法中,我们根据是否有选中分类的情况返回不同的查询结果。
创建模板文件
在上一步的视图函数中,我们指定了使用pic_作为模板文件进行渲染。
```html
{% for pic in pics %}
{{ pic.title }}
分类:{{ }}
{% endfor %}
- 上一页
- {{ page }}
- {{ page }}
- 下一页
{% if pages.has_previous %}
{% endif %}
{% for page in _range %}
{% if page %}
{% else %}
{% endif %}
{% endfor %}
{% if pages.has_next %}
{% endif %}
```
这段代码中,我们使用了Bootstrap的card组件来展示每个图片的标题和分类信息。同时,我们通过调用pic.picpath.url获取图片的路径,并将其作为img标签的src属性值。在分页部分,我们使用了Bootstrap的pagination组件来展示页码列表,并通过判断当前页是否为当前页码来应用不同的样式。最后,在表单部分,我们使用了select标签和option标签来展示分类列表,并通过判断当前所选择的分类来设置selected属性。
运行Django服务器
最后,我们可以运行Django服务器,在浏览器中查看效果。注意,需要提前创建超级用户并上传一张图片,并创建两个分类。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。