### 第一步:定義模型
在項目(Blog)下的model.py中
~~~
class Banner(models.Model):
title=models.CharField('標題',max_length=50)
pic=models.ImageField('輪播圖',upload_to='static/images/banner')
link_url=models.URLField('圖片連接',max_length=100)
idx=models.IntegerField('索引排序')
is_active=models.BooleanField('是否是active',default=False)
create_time=models.DateTimeField('創建時間',default=datetime.now)
def __str__(self):
return self.title
class Meta:
verbose_name='輪播圖'
verbose_name_plural='輪播圖'
~~~
### 第二步:添加模型到settings.py中的INSTALLED_APPS中
比如下面的blogs就是我們添加進去的:
~~~
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blogs',
]
~~~
### 第三步:生成模型內容
在命令提示符下,定位到manage.py目錄中,然后輸入
~~~
python manage.py makemigrations
~~~
如果出現下面的錯誤,說明沒有安裝ImageField所必須的第三方庫
~~~
ERRORS:
blogs.Banner.pic: (fields.E210) Cannot use ImageField because Pillow is not installed.
HINT: Get Pillow at https://pypi.python.org/pypi/Pillow or run command "pip install Pillow".
WARNINGS:
?: (2_0.W001) Your URL pattern '^index/$' [name='index'] has a route that contains '(?P<', begins with a '^', or ends with a '$'. This was likely an oversight when migrating to django.urls.path().
~~~
**如何安裝第三方庫**
可以利用豆瓣的源來快速安裝,不然國外的速度太慢
~~~
pip install --trusted-host pypi.douban.com -i http://pypi.douban.com/simple/ Pillow
~~~
### **第四步:生成數據庫表**
在命令提示符中,執行
~~~
python manage.py migrate
~~~
### **第五步:創建模版文件夾templates和靜態資源文件夾static,這兩個文件夾與manage.py位于同一根目錄下。并把靜態資源css、js、images等靜態資源放于static文件夾下面**
### **第六步:在settings.py中設置模板文件夾及靜態文件夾**
模板的代碼如下
~~~
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'template')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
~~~
靜態文件的代碼如下:
~~~
STATIC_URL = '/static/'
STATICFILES_DIRS=(
os.path.join(BASE_DIR,"static"),
)
~~~
### **第七步:創建首頁,在blogs文件夾下的views.py中,寫入**
~~~
def index(request):
return render(request,'index.html',{})
~~~
### **第八步:在urls.py中設置頁面路徑**
~~~
from blogs.views import index
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('blogs.urls')),
]
~~~
同時,在blogs下面新建一個urls.py的文件,并寫入
~~~
from django.urls import path
from blogs.views import index
urlpatterns=[
path('',index,name='index'),
]
~~~
### **第九步:注冊后臺功能模塊,實現可通過后臺上傳輪播圖**
打開項目下面的admin.py,然后輸入
~~~
from django.contrib import admin
from blogs.models import Banner
admin.site.register(Banner)
~~~
然后就可以進入后臺進行添加輪播圖了
### **第十步:動態查詢輪播圖數據**
打開blogs下面的views.py,并修改為
~~~
from django.shortcuts import render
from .models import Banner
# Create your views here.
def index(request):
banner_list=Banner.objects.all()
ctx={
'banner_list':banner_list
}
return render(request,'index.html',ctx)
~~~
第十一步:給靜態頁面賦值
打開templates下面的index.html
并修改為
~~~
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>博客首頁</title>
<link href="/static/css/bootstrap.min.css" rel="stylesheet">
<link href="/static/css/nifty.min.css" rel="stylesheet">
<script src="/static/js/jquery-2.2.4.min.js"></script>
<script src="/static/js/bootstrap.min.js"></script>
<script src="/static/js/nifty.min.js"></script>
</head>
<body>
<div id="banners" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators out">
{% for v in banner_list %}
{% if v.is_active %}
<li class="active" data-slide-to="{{v.idx}}" data-target="#banners"></li>
{% else %}
<li data-slide-to="{{v.idx}}" data-target="#banners" class=""></li>
{% endif %}
{% endfor %}
</ol>
<div class="carousel-inner text-center">
{% for v in banner_list %}
{% if v.is_active %}
<div class="item active">
<a href="{{v.link_url}}">
<img src="{{v.pic}}" alt="{{v.title}}" class="img-responsive" />
</a>
</div>
{% else %}
<div class="item">
<a href="{{v.link_url}}">
<img src="{{v.pic}}" alt="{{v.title}}" class="img-responsive" />
</a>
</div>
{% endif %}
{% endfor %}
<div class="item active">
<img src="" alt="" class="img-responsive" />
</div>
</div>
<a class="carousel-control left" data-slide="prev" href="#banners"><i class="demo-pli-arrow-left icon-2x"></i></a>
<a class="carousel-control right" data-slide="next" href="#banners"><i class="demo-pli-arrow-right icon-2x"></i></a>
</div>
</body>
</html>
~~~