iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 18
0
Modern Web

Django案例實作之踩坑全記錄系列 第 18

Django - template(三)

  • 分享至 

  • xImage
  •  

測驗結果畫面想加一下圖片,依成績級距放對應的圖片。

第一步:settings.py

要先來設定圖片要儲存的地方:

STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static"),]

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "media")

不需要自己建立資料夾,只要在admin上傳第一張圖片後,會自行生成一個mysite/media資料夾。

第二部:urls.py

在最後面加上這一行,這樣才可以在網頁上顯示圖片:

urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

第三步:增加model

*quiz/models.py
class Six(models.Model):
    range_start = models.IntegerField(default=0)#分數區間的頭
    range_end = models.IntegerField(default=0)#分數區間的尾
    grade = models.CharField(max_length=200)
    photo = models.ImageField(upload_to='grade_pictures', default="")

1.ImageField用於保存圖像文件,upload_to是圖片上傳後要儲存的路徑 'mysite/media/grade_pictures'。
2.要安裝pillow套件。
3.grade代表的是每個分數區間,總共有六個:傑出、超乎期待、合格...請參考O.W.L exam。
https://ithelp.ithome.com.tw/upload/images/20200918/20129725FjHl2CJH0G.png

第四步:調整views.py function result

def result(request, total):
    score = total
    six = Six.objects.all()
    for s in six:
        if score in range(s.range_start, s.range_end):
        #判斷測驗分數位在哪個區間
            grade = s.grade
            photo = s.photo
        else:
            pass
    return render(request, 'result.html', locals())

第五步:template

    <TABLE border="0" class="t1" cellpadding="9">
        <TR>
            <TD style="font-size:20px;" align="center" colspan="3" class="td1" bgcolor="#5AF961">測驗結果:{{ grade }}</TD>
        </TR>
        <br />
        <TR>
            <TD class="td2"><img src="{{ photo.url }}" width="900"></TD>
        </TR>
        <TR>
            <TD class="td2"><a href="/quiz/"><p style="text-align:center">⇢再做一次測試</p></a></TD>
        </TR>

    </TABLE>

記得放置photo變數時是寫{{ photo.url }}。

結果長這樣啦~
https://ithelp.ithome.com.tw/upload/images/20200918/201297250LbQMUEDWO.png

題外話,今天聚餐回家後,努力坐到電腦桌前打字,沒多久眼皮跟著在打架,有錯誤再煩請告知,萬分感謝。趕快洗睡明天自然醒zzz


上一篇
Django - redirect錯誤示範
下一篇
Django - CSS
系列文
Django案例實作之踩坑全記錄34
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
菜鳥碼農
iT邦新手 5 級 ‧ 2021-08-30 17:28:02

補充
admin.py新增對Six操作

from django.contrib import admin
from .models import Question, Choice,Six
# Register your models here.
class ChoiceInline(admin.StackedInline): # class StachedInline
    model = Choice
    extra = 4 # 一個問題有四個選項

class QuestionAdmin(admin.ModelAdmin):
    list_display = ('id', 'question_text') # 詳細說明參考附錄圖一
    fieldsets = [
        (None, {'fields': ['question_text']}),
    ] # 詳細說明參考附錄圖二
    inlines = [ChoiceInline]

class SixAdmin(admin.ModelAdmin):
    list_display = ('id', 'range_start','range_end','grade','photo')

admin.site.register(Question, QuestionAdmin)
admin.site.register(Six, SixAdmin)

我要留言

立即登入留言