2016 - 2024

感恩一路有你

编写Django模型类

浏览量:4588 时间:2024-02-06 16:38:40 作者:采采

在应用的文件中,我们首先需要定义两个模型类: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 %}

```

这段代码中,我们使用了Bootstrap的card组件来展示每个图片的标题和分类信息。同时,我们通过调用pic.picpath.url获取图片的路径,并将其作为img标签的src属性值。在分页部分,我们使用了Bootstrap的pagination组件来展示页码列表,并通过判断当前页是否为当前页码来应用不同的样式。最后,在表单部分,我们使用了select标签和option标签来展示分类列表,并通过判断当前所选择的分类来设置selected属性。

运行Django服务器

最后,我们可以运行Django服务器,在浏览器中查看效果。注意,需要提前创建超级用户并上传一张图片,并创建两个分类。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。