日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

修改了模板文件tpl如何立即生效_Views视图与模板

發布時間:2025/3/11 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 修改了模板文件tpl如何立即生效_Views视图与模板 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、概述

用戶請求到視圖流程:

  • 當有人訪問我們django項目的時候 例如127.0.0.1:8000/polls/23,django首先到加載mysite.urls模塊

  • 在mysite.urls中發現有urlpatterns變量,于是在其內按順序進行匹配。當它匹配上了polls,就到匹配到的polls.urls中進行下一步處理

  • 在polls.url中又匹配到了/,最終結果就是調用該模式對應的detail視圖。

mysite/urls.py文件

polls/urls.py文件

polls/views.py文件

二、模板的命名空間

1、首先,在polls目錄下創建一個新的templates目錄,Django會在它里面查找模板文件。

項目settings.py文件中的?TEMPLATES配置項描述了 Django 如何載入和渲染模板。默認的設置文件設置了?DjangoTemplates?后端作為模板引擎,并將?APP_DIRS設置成了 True。這一選項將會讓?DjangoTemplates?在每個?INSTALLED_APPS?文件夾中尋找 "templates" 子目錄。

2、在templates中創建index文件

3、修改視圖文件polls/views.py,讓新的index.html文件生效并且如果請求的問卷ID不存在,那么會彈出一個Http404錯誤。

以上代碼使用快捷方式:get_object_or_404()

就像render函數一樣,get_object_or_404()方法

三、url Names命名空間

當你有多個app的時候Django通過URL name來區分某個APP,在polls/urls.py文件的開頭部分,添加一個app_name的變量來指定該應用的命名空間:

四、form表單

1、修改polls/detail.html文件,代碼如下:

簡要說明:

  • 上面的模板顯示一系列單選按鈕,按鈕的值是選項的ID,按鈕的名字是字符串"choice"。這意味著,當你選擇了其中某個按鈕,并提交表單,一個包含數據choice=#的POST請求將被發送到指定的url,#是被選擇的選項的ID。這就是HTML表單的基本概念。

  • form標簽的action屬性和method屬性,action表示你要發送的目的url,method表示提交數據的方式,一般分post和get。

  • forloop.counter是Django模板系統專門提供的一個變量,用來表示你當前循環的次數,一般用來給循環項目添加有序數標。

  • 由于我們發送了一個POST請求,就必須考慮一個跨站請求偽造的安全問題,簡稱CSRF。Django為你提供了一個簡單的方法來避免這個困擾,那就是在form表單內添加一條{% csrf_token %}標簽,標簽名不可更改,固定格式,位置任意,只要是在form表單內。這個方法對form表單的提交方式方便好使。

2、修改polls/views.py文件中的vote函數

簡要說明:

  • request.POST是一個類似字典的對象,允許你通過鍵名訪問提交的數據。本例中,request.POST[’choice’]返回被選擇選項的ID,并且值的類型永遠是string字符串,哪怕它看起來像數字!同樣的,你也可以用類似的手段獲取GET請求發送過來的數據,一個道理。

  • request.POST[’choice’]有可能觸發一個KeyError異常,如果你的POST數據里沒有提供choice鍵值,在這種情況下,上面的代碼會返回表單頁面并給出錯誤提示。

  • 在選擇計數器加一后,返回的是一個HttpResponseRedirect而不是先前我們常用的HttpResponse。HttpResponseRedirect需要一個參數:重定向的URL。這里有一個建議,當你成功處理POST數據后,應當保持一個良好的習慣,始終返回一個HttpResponseRedirect。這不僅僅是對Django而言,它是一個良好的WEB開發習慣。

  • 我們在上面HttpResponseRedirect的構造器中使用了一個reverse()函數。它能幫助我們避免在視圖函數中硬編碼URL。它首先需要一個我們在URLconf中指定的name,然后是傳遞的數據。例如'/polls/3/results/',其中的3是某個question.id的值。重定向后將進入polls:results對應的視圖,并將question.id傳遞給它。白話來講,就是把活扔給另外一個路由對應的視圖去干。

當有人對某個問題投票后,vote()視圖重定向到了問卷的結果顯示頁面。下面我們來寫這個處理結果頁面的視圖函數detail函數(polls/views.py):

還需要寫個模板polls/templates/polls/results.html。(路由、視圖、模板、模型!都是這個套路....)

五、使用通用視圖,減少代碼量

將原來的代碼改為通用視圖的方法:

  • 修改URLconf設置

  • 刪除一些舊的無用的視圖

  • 采用基于類視圖的新視圖

1、修改URLconf

2、修改視圖

在這里,我們使用了兩種通用視圖ListView和DetailView(它們是作為父類被繼承的)。這兩者分別代表“顯示一個對象的列表”和“顯示特定類型對象的詳細頁面”的抽象概念。

  • 每一種通用視圖都需要知道它要作用在哪個模型上,這通過model屬性提供。

  • DetailView需要從url捕獲到的稱為"pk"的主鍵值,因此我們在url文件中將2和3條目的修改成了。

默認情況下,DetailView通用視圖使用一個稱作/_detail.html的模板。在本例中,實際使用的是polls/detail.html。template_name屬性就是用來指定這個模板名的,用于代替自動生成的默認模板名。(一定要仔細觀察上面的代碼,對號入座,注意細節。)同樣的,在results列表視圖中,指定template_name為'polls/results.html',這樣就確保了雖然resulst視圖和detail視圖同樣繼承了DetailView類,使用了同樣的model:Qeustion,但它們依然會顯示不同的頁面。(模板不同嘛!so easy!)

類似的,ListView通用視圖使用一個默認模板稱為/_list.html。我們也使用template_name這個變量來告訴ListView使用我們已經存在的?"polls/index.html"模板,而不是使用它自己默認的那個。

在教程的前面部分,我們給模板提供了一個包含question和latest_question_list的上下文變量。而對于DetailView,question變量會被自動提供,因為我們使用了Django的模型(Question),Django會智能的選擇合適的上下文變量。然而,對于ListView,自動生成的上下文變量是question_list。為了覆蓋它,我們提供了context_object_name屬性,指定說我們希望使用latest_question_list而不是question_list。

總結

以上是生活随笔為你收集整理的修改了模板文件tpl如何立即生效_Views视图与模板的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。