autoescape
控制當前的自動轉義行為。該標籤以 on
或 off
作為引數,決定塊內是否有自動轉義行為。此區塊以 endautoescape
結束標籤關閉。
示例:
{% autoescape on %}
{{ body }}
{% endautoescape %}
Django中自定義tag的使用
在 Django 中,你可以透過建立一個自定義的模板標籤來實現 get_direction
。以下是建立自定義模板標籤的步驟:
- 在你的 Django 應用目錄下建立一個名為
templatetags
的目錄。 - 在
templatetags
目錄下建立一個 Python 檔案,例如my_tags.py
。 - 在
my_tags.py
檔案中,你需要匯入django.template
,然後建立一個繼承自django.template.Library
的例項。 - 在這個例項上,你可以使用
@register.simple_tag
裝飾器來定義你的自定義模板標籤。
以下是一個簡單的示例,定義了一個 get_direction
標籤,它返回一個字串 "north":
from django import template
register = template.Library()
@register.simple_tag
def get_direction():
return "north"
然後在你的模板中,你需要載入你的自定義模板標籤,然後就可以使用它了:
{% load my_tags %}
{% get_direction as direction %}
這樣,direction
變數就會被賦值為 "north"。你可以根據你的需求修改 get_direction
函式的實現。
請求的方法判斷
在 Django 中,你可以透過檢查 request.method
來判斷請求的方法是 GET 還是 POST。request.method
是一個字串,它表示請求的 HTTP 方法。如果請求的方法是 GET,request.method
的值將是 'GET';如果請求的方法是 POST,request.method
的值將是 'POST'。
def someView(request):
if request.method == 'POST':
print('post')
return HttpResponse('post')
else: # 處理 GET 請求
print('get')
return HttpResponse('get')
Get 方法的引數獲取
在 Django 中,你可以透過 request.GET
或 request.POST
來獲取請求的引數。這兩個屬性都是 QueryDict 物件,它們提供了一種方便的方式來訪問所有的 HTTP 引數。
如果你想獲取 GET 請求的引數,你可以使用 request.GET
。例如,如果你的 URL 是 /myview/?param=value
,你可以這樣獲取 param
引數的值:
def my_view(request):
param_value = request.GET.get
圖片載入
在 Django 模板中,你可以使用雙大括號 {{ }}
來插入變數。在你的例子中,如果你想使用一個變數作為 img
元素的 src
屬性,你可以這樣做:
<img src="{{ item.avator }}" class="img-fluid border-radius-md" />
在這個例子中,item.avator
是一個變數,它的值應該是一個圖片的 URL。這個變數的值將被插入到 src
屬性中。
請注意,這個變數需要在你的檢視函式中被傳遞到模板。例如,如果你的檢視函式是這樣的:
def my_view(request):
discussion = [
{'avator': '/static/images/avator1.jpg'},
{'avator': '/static/images/avator2.jpg'},
# ...
]
return render(request, 'my_template.html', {'discussion': discussion})
那麼在模板中,item.avator
將會是每個字典中 'avator' 鍵對應的值。
{% url %} 使用
{% url %}
是 Django 模板語言中的一個標籤,它的作用是生成一個 URL。這個標籤接受一個檢視函式的名稱作為引數,並返回對應的 URL。
在你的例子中,{% url 'community:discussion-create' %}
將會生成一個指向 discussion-create
檢視函式的 URL。這個檢視函式應該在你的 community
應用的 urls.py
檔案中定義。
這個標籤非常有用,因為它允許你在模板中生成動態的 URL。如果你在 urls.py
檔案中更改了 URL 的模式,你不需要在模板中更改 URL,因為 {% url %}
標籤會自動生成正確的 URL。
你可以在模板中的任何地方使用 {% url %}
標籤,例如在連結的 href
屬性中:
<a href="{% url 'community:discussion-create' %}">建立討論</a>
在這個例子中,點選連結將會導航到 discussion-create
檢視函式對應的頁面。
aria-controls 和 aria-selected 屬性的作用
aria-controls
和 aria-selected
是 ARIA(Accessible Rich Internet Applications)規範中定義的屬性,用於提高網頁的可訪問性。
-
aria-controls
:此屬性用於建立控制元素(如按鈕或連結)與被控制元素之間的關係。被控制元素的 ID 應該作為aria-controls
屬性的值。例如,如果一個按鈕用於開啟一個對話方塊,那麼這個按鈕的aria-controls
屬性應該設定為對話方塊的 ID。 -
aria-selected
:此屬性用於表示一個元素是否被選中。這對於可選的元素(如選項卡、列表項等)非常有用。aria-selected
的值可以是 'true' 或 'false'。如果元素被選中,aria-selected
的值應該是 'true';否則,應該是 'false'。
在你的程式碼中,aria-controls
和 aria-selected
屬性用於建立選項卡式的導航選單。每個選項卡連結到一個特定的元素(由 aria-controls
指定),並透過 aria-selected
屬性表示它是否被選中。這樣,螢幕閱讀器使用者可以更容易地理解和操作你的網頁。
選項卡
使用了 Bootstrap 的 Tab 元件來建立一個選項卡式的導航選單。每個 <a>
標籤都有一個 href
屬性,該屬性的值以 #
開頭,表示它是一個內部連結,連結到頁面上的一個元素。這個元素的 ID 應該與 href
屬性的值(去掉 #
)相同。
要控制每個選項卡顯示的內容,你需要在頁面上建立對應的元素,並設定它們的 ID 與選項卡的 href
屬性相匹配。這些元素通常是 <div>
元素,它們包含了每個選項卡的內容。
<ul class="nav nav-pills nav-fill p-1" role="tablist">
<li class="nav-item">
<a class="nav-link mb-0 px-0 py-1 active" data-bs-toggle="tab" href="#hot-tabs-simple" role="tab" aria-controls="hot" aria-selected="true">最熱討論</a>
</li>
<li class="nav-item">
<a class="nav-link mb-0 px-0 py-1" data-bs-toggle="tab" href="#new-tabs-simple" role="tab" aria-controls="new" aria-selected="true">最新發布</a>
</li>
<li class="nav-item">
<a class="nav-link mb-0 px-0 py-1" data-bs-toggle="tab" href="#agg-tabs-simple" role="tab" aria-controls="agg" aria-selected="true">最高點贊</a>
</li>
</ul>
將所有的選項卡內容都放在一個父元素中,併為每個選項卡內容設定 class="tab-pane fade"
。然後,你可以使用 Bootstrap 的 JavaScript 外掛來自動切換選項卡內容的顯示和隱藏。
下面是一個例子:
<div class="tab-content">
<div id="agg-tabs-simple" class="tab-pane fade show active">
<!-- 這裡是 "最高點贊" 選項卡的內容 -->
</div>
<div id="hot-tabs-simple" class="tab-pane fade">
<!-- 這裡是 "My Profile" 選項卡的內容 -->
</div>
<!-- 其他選項卡內容 -->
</div>
在這個例子中,所有的選項卡內容都放在一個 class="tab-content"
的 <div>
元素中。每個選項卡內容都是一個 class="tab-pane fade"
的 <div>
元素,它的 ID 與對應的選項卡的 href
屬性相匹配。
當使用者點選一個選項卡時,Bootstrap 的 JavaScript 外掛會自動顯示與該選項卡 href
屬性相匹配的元素,並隱藏其他元素。這樣,所有的選項卡內容都會佔用同一個位置,每次只顯示一個。
Bootstrap 元素居右
要將元素靠右,你可以使用 Bootstrap 的內建工具類 text-end
。這個類會將文字對齊設定為右對齊。你可以將這個類新增到你想要靠右的元素的 class
屬性中。
在你的程式碼中,如果你想將 author
div 元素靠右,你可以這樣做:
<div class="author align-items-center text-end">
這樣,author
div 中的內容就會靠右顯示了。
如果你只想將 name
div 元素靠右,你可以這樣做:
<div class="name ps-3 text-end">
可以使用 Bootstrap 的 d-flex
和 justify-content-end
類。d-flex
類會將元素設定為 flex 容器,而 justify-content-end
類會將 flex 容器的內容對齊到右邊。
你可以將這兩個類新增到 "author" div 的 class
屬性中,如下所示:
<div class="author align-items-center d-flex justify-content-end">
這樣,"author" div 中的內容就會靠右顯示了。
<div class="author align-items-center d-flex justify-content-end" style="margin-top: 10px;">
<img src="{{ user_avatar }}" alt="..." class="avatar shadow" />
<div class="name ps-3">
<span>{{ user_name }}</span>
<div class="stats">
<small>Posted on {{ post_time }}</small>
</div>
</div>
</div>
button跳轉時傳參
在 Django 中,你可以使用 <a>
標籤和 Bootstrap 的 btn
類來建立一個看起來像按鈕的連結。然後,你可以使用 Django 的 {% url %}
模板標籤來生成連結的 URL,並在其中使用表示式來計算引數。
例如,假設你有一個名為 post 的檢視,它接受一個名為
post_id的引數。你可以建立一個按鈕,當點選時,會跳轉到
post_id引數加一的
post` 檢視:
<a href="{% url 'post post_id|add:"1" %}" class="btn btn-primary">Next Post</a>
在這個例子中,post_id|add:"1"
是一個 Django 模板表示式,它會將 post_id
的值加一。{% url 'post-details' post_id|add:"1" %}
會生成一個 URL,這個 URL 是 post-details
檢視,引數是 post_id
加一的值。
請注意,你需要在你的檢視和 URL 配置中正確處理這個引數。如果 post_id
加一的值不存在,你的檢視應該返回一個適當的錯誤響應(如 404 錯誤)。
對於 <button>
標籤,你不能直接設定 href
屬性來實現跳轉,因為 <button>
標籤本身不支援 href
屬性。但你可以使用 JavaScript 來實現點選按鈕時的跳轉。
在 Django 中,你可以在按鈕的 onclick
屬性中使用 JavaScript 的 window.location.href
來設定新的 URL。你可以使用 Django 的 {% url %}
模板標籤來生成這個 URL,並在其中使用表示式來計算引數。
例如,假設你有一個名為 post-details
的檢視,它接受一個名為 post_id
的引數。你可以建立一個按鈕,當點選時,會跳轉到 post_id
引數加一的 post-details
檢視:
<button class="btn btn-primary" onclick="window.location.href='{% url 'post-details' post_id|add:'1' %}'">Next Post</button>
在這個例子中,post_id|add:'1'
是一個 Django 模板表示式,它會將 post_id
的值加一。{% url 'post-details' post_id|add:'1' %}
會生成一個 URL,這個 URL 是 post-details
檢視,引數是 post_id
加一的值。
當使用者點選這個按鈕時,瀏覽器會導航到這個新的 URL。
配置media路徑,儲存和讀取 ImageField
或 FileField
使用media
在 Django 中,檔案儲存路徑的開頭是否有 /
取決於你想要如何組織你的檔案。
如果路徑以 /
開頭,那麼這個路徑就是絕對路徑。這意味著無論你當前在哪個目錄下,這個路徑都會從你的檔案系統的根目錄開始。例如,/static/images/covers/
就是一個絕對路徑,它指向你的檔案系統根目錄下的 static/images/covers/
目錄。
如果路徑不以 /
開頭,那麼這個路徑就是相對路徑。這意味著這個路徑會從你當前的目錄開始。例如,static/images/covers/
就是一個相對路徑,如果你當前在 /home/user/myproject/
目錄下,那麼這個路徑就會指向 /home/user/myproject/static/images/covers/
目錄。
在 Django 的 ImageField
或 FileField
中,upload_to
引數通常使用相對路徑。這是因為 Django 會將這個路徑與你在 settings.py
檔案中設定的 MEDIA_ROOT
路徑結合起來,來確定檔案的最終儲存位置。
例如,如果你的 MEDIA_ROOT
是 /home/user/myproject/media/
,並且你的 upload_to
是 static/images/covers/
,那麼檔案會被儲存到 /home/user/myproject/media/static/images/covers/
目錄下。
在 Django 中,你可以使用 MEDIA_URL
和 MEDIA_ROOT
設定來管理媒體檔案。MEDIA_ROOT
是儲存媒體檔案的檔案系統路徑,而 MEDIA_URL
是這些檔案的 URL 的字首。
在你的 HTML 檔案中,你可以使用 Django 的模板語言來訪問這些檔案。例如,如果你有一個 ImageField
或 FileField
,你可以使用 .url
屬性來獲取這個檔案的 URL。
假設你的 MEDIA_URL
是 /media/
,你的 MEDIA_ROOT
是 /path/to/your/project/media/
,並且你有一個 Post
模型,這個模型有一個 cover
欄位,這個欄位是一個 ImageField
。
在你的檢視函式中,你可以獲取 Post
物件,然後將 post.cover.url
傳遞給你的模板:
def post_details(request, post_id):
post = get_object_or_404(Post, id=post_id)
context = {
'cover': post.cover.url,
}
return render(request, 'post-details.html', context)
然後,在你的模板中,你可以使用 {{ cover }}
來訪問這個 URL:
<img src="{{ cover }}" alt="Cover image" />
這樣,當 Django 渲染這個模板時,它會將 {{ cover }}
替換為 post.cover.url
的值,這個值是 /media/
加上 cover
檔案的路徑。例如,如果 cover
檔案的路徑是 static/images/covers/my_cover.jpg
,那麼 post.cover.url
的值就會是 /media/static/images/covers/my_cover.jpg
。
請注意,為了讓這個 URL 可以正確地指向 MEDIA_ROOT
下的檔案,你需要在你的 urls.py
檔案中新增一些配置。你可以使用 django.conf.urls.static.static
函式來自動地新增這些配置:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ... your other url patterns ...
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
這樣,當 DEBUG
是 True
時,Django 就會新增一個 URL 模式,這個模式將 MEDIA_URL
下的所有請求對映到 MEDIA_ROOT
目錄。
redirect使用
在 Django 中,redirect
是一個非常有用的函式,它可以將使用者重定向到一個新的 URL。當你在檢視函式中返回一個 redirect
響應時,瀏覽器會收到一個 302 重定向響應,並被告知新的 URL。然後,瀏覽器會自動請求這個新的 URL。
如果你在 redirect
後重新整理瀏覽器,瀏覽器會重新請求最後一個請求的 URL,也就是 redirect
指向的 URL。這是因為 redirect
實際上是透過傳送一個特殊的 HTTP 響應來告訴瀏覽器去請求一個新的 URL。
這也是為什麼在提交表單後通常會使用 redirect
:如果使用者在提交表單後重新整理瀏覽器,瀏覽器會重新提交表單,可能會導致資料被重複提交。但是,如果你在處理表單資料後返回一個 redirect
響應,那麼使用者重新整理瀏覽器時,瀏覽器會請求 redirect
指向的 URL,而不是重新提交表單。
下面是一個例子:
from django.shortcuts import redirect
def create_post(request):
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
post = form.save()
return redirect('post_details', post_id=post.id)
else:
form = PostForm()
return render(request, 'create_post.html', {'form': form})
在這個例子中,當使用者提交表單時,我們會建立一個新的 Post
物件,並將使用者重定向到這個 Post
的詳情頁面。如果使用者在被重定向後重新整理瀏覽器,瀏覽器會重新請求 Post
的詳情頁面,而不是重新提交表單。
透過ID獲取dom
在 JavaScript 中,你可以使用 document.getElementById
函式來獲取 ID 為 like
的元素。這個函式會返回一個表示這個元素的物件,你可以使用這個物件來讀取或修改這個元素的屬性。
在你的 HTML 中,你可以新增一個 <script>
標籤來包含你的 JavaScript 程式碼。例如:
<script>
var likeElement = document.getElementById('like');
// 現在,likeElement 就是 ID 為 'like' 的元素
// 你可以使用 likeElement 來讀取或修改這個元素的屬性
// 例如,你可以使用 likeElement.textContent 來獲取或設定這個元素的文字內容
</script>
請注意,你需要確保 document.getElementById
是在 DOM 完全載入後再呼叫的。如果你在 DOM 還沒有完全載入時呼叫 document.getElementById
,那麼這個函式可能會返回 null
,因為它還找不到 ID 為 like
的元素。你可以將你的 JavaScript 程式碼放在 <body>
標籤的最後,或者使用 window.onload
事件來確保你的程式碼是在 DOM 完全載入後再執行的。
AutoField的遞增邏輯
在 Django 中,AutoField
是一個整數字段,它會自動遞增。每當你建立一個新的記錄,AutoField
就會為這個記錄分配一個新的、唯一的值。這個值是在資料庫中所有的同一型別的 AutoField
值中最大的那個值加一。
AutoField
的自增條件是:
-
當你建立一個新的記錄時,如果你沒有為
AutoField
指定一個值,那麼 Django 就會自動為這個欄位分配一個新的值。 -
如果你為
AutoField
指定了一個值,那麼 Django 就會使用你指定的這個值。但是,請注意,如果你指定的值已經被其他的記錄使用了,那麼 Django 就會丟擲一個IntegrityError
異常。
在你的程式碼中,id
欄位是一個 AutoField
。這意味著每當你建立一個新的 File
或 ChatMessage
記錄時,Django 就會自動為 id
欄位分配一個新的、唯一的值。
class File(models.Model):
id = models.AutoField(primary_key=True)
# ...
class ChatMessage(models.Model):
id = models.AutoField(primary_key=True)
# ...
請注意,如果你沒有為模型指定一個主鍵,那麼 Django 就會自動為你的模型新增一個名為 id
的 AutoField
。
View類檢視中request的使用
在 Django 中,View
類的方法不需要直接傳入 request
引數。當 Django 處理一個請求時,它會自動建立一個 request
物件,並將這個物件作為第一個引數傳遞給檢視函式。在類檢視中,這個 request
物件被儲存在 self.request
屬性中,所以你可以在任何方法中透過 self.request
來訪問這個物件。
self
是 Python 類中的一個特殊引數,它代表類的例項。在類的方法中,你可以使用 self
來訪問或修改這個例項的屬性。
檢視中request.user 的使用
在方法中,self.request.user.is_authenticated
是檢查當前使用者是否已經登入。如果使用者已經登入,那麼 self.request.user
就是一個表示當前使用者的 User
例項,否則 self.request.user
是一個 AnonymousUser
例項。
作為查詢的條件時,使用user的id屬性進行查詢ChatMessage.objects.filter(user=self.request.user.id).order_by('created_at')
是查詢資料庫,獲取當前使用者的所有聊天訊息,並按照 created_at
欄位的值進行排序。這個查詢的結果是一個 QuerySet
,你可以將它看作是一個 ChatMessage
例項的列表。
View類檢視中get post的引數
在 Django 的類檢視(Class-Based View)中,get
方法是處理 GET 請求的方法。這個方法的第一個引數是 self
,它代表類的例項。第二個引數是 request
,它是一個 HttpRequest
物件,代表客戶端發來的 HTTP 請求。
雖然 self
包含了 request
屬性(即 self.request
),但是這個屬性是在 Django 呼叫 get
方法之前設定的。在 get
方法被呼叫時,Django 會將 HttpRequest
物件作為第二個引數傳遞給 get
方法。這樣,你就可以在 get
方法中直接訪問 request
物件,而不需要透過 self.request
。
這是 Django 的設計決定,它使得你可以在類檢視的任何方法中透過 self.request
訪問 HttpRequest
物件,同時也可以在處理 HTTP 請求的方法(如 get
、post
等)中直接訪問 request
物件。
jQuery中$的使用
在 jQuery 中,$('list')
會嘗試選擇一個名為 list` 的 HTML 標籤。
如果你想要選擇一個類名為 messages-list
的元素,你應該使用 .messages-list
作為選擇器:
$('.messages-list')
如果你想要選擇一個 id 為 messages-list
的元素,你應該使用 #messages-list
作為選擇器:
$('#messages-list')
在這兩個例子中,.
和 #
是 CSS 選擇器的語法,.
用於選擇類名,#
用於選擇 id。jQuery 的選擇器語法基於 CSS 的選擇器語法。
load_dotenv()載入 .env 檔案
load_dotenv()
預設不會覆蓋已經存在的環境變數。如果你已經在環境中設定了一個變數,那麼 .env 檔案中的值不會被載入。你可以透過傳遞 override=True
給 load_dotenv()
來改變這個行為,例如 load_dotenv(override=True)
。
Django進行登陸的許可權校驗
在 Django 中,你可以使用 login_required
裝飾器來實現這個功能。login_required
裝飾器會檢查使用者是否已經登入,如果沒有登入,它會重定向使用者到登入頁面。
首先,你需要在你的檢視函式上新增 @login_required
裝飾器:
from django.contrib.auth.decorators import login_required
@login_required
def your_view(request):
# ...
然後,你需要在你的 settings.py 檔案中設定 LOGIN_URL
,這是當使用者未登入並嘗試訪問需要登入的頁面時,Django 會重定向使用者到這個 URL:
LOGIN_URL = 'login'
在這個例子中,'login'
是登入檢視的 URL 名稱,你需要將它替換為實際的 URL 名稱。
請注意,login_required
裝飾器只能用於基於函式的檢視。如果你使用基於類的檢視,你應該使用 LoginRequiredMixin
:
from django.contrib.auth.mixins import LoginRequiredMixin
class YourView(LoginRequiredMixin, View):
# ...
在這個例子中,LoginRequiredMixin
應該在其他的 mixin 和 View
之前。
在基於view的類檢視的post方法中校驗登陸
Django 提供了一個 request.user.is_authenticated
屬性,你可以使用它來檢查使用者是否已經登入。
如果使用者沒有登入,你可以使用 redirect
函式來重定向使用者到登入頁面。你需要在你的 post
方法中新增以下的程式碼:
from django.shortcuts import redirect
from django.urls import reverse
class smartAnalysis(View):
def post(self, request, *args, **kwargs):
if not request.user.is_authenticated:
return redirect(reverse('login')) # 'login' 是登入檢視的 URL 名稱
# ... 其他的程式碼 ...
在這個例子中,reverse('login')
會返回登入檢視的 URL,你需要將 'login'
替換為實際的 URL 名稱。
請注意,這種方法不會阻止未登入的使用者訪問其他的方法,例如 get
或 put
。如果你想要對所有的方法進行登入檢查,你應該使用 LoginRequiredMixin
。
Django中model建立陣列欄位
在 Django 的模型中,你可以使用 ArrayField
來建立一個陣列欄位。ArrayField
是 PostgreSQL 資料庫的一個特性,所以它只在使用 PostgreSQL 資料庫時可用。
首先,你需要從 django.contrib.postgres.fields
匯入 ArrayField
,然後你可以在你的模型中使用它。例如,如果你想要建立一個字串陣列,你可以這樣做:
from django.contrib.postgres.fields import ArrayField
from django.db import models
class ChatRecord(models.Model):
id = models.AutoField(primary_key=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
topic = ArrayField(models.CharField(max_length=100), blank=True, default=list)
def __str__(self):
return f"{self.user.username}: {', '.join(self.topic)}"
在這個例子中,ArrayField(models.CharField(max_length=100), blank=True, default=list)
建立了一個可以儲存字串的陣列。blank=True
表示這個欄位可以為空,default=list
表示預設值是一個空列表。
請注意,如果你的資料庫不是 PostgreSQL,你需要使用其他的方法來實現陣列欄位,例如使用 JSONField
或者建立一個多對多的關係。
Django ORM 中distinct方法
在 Django ORM 中,distinct()
方法用於從查詢結果中刪除重複的行。
例如,如果你有一個 Blog
模型,每個 Blog
物件有一個 author
欄位,你可能想要獲取所有的作者。你可以使用以下的程式碼:
authors = Blog.objects.values('author').distinct()
在這個例子中,values('author')
返回一個包含所有 author
欄位值的字典,distinct()
確保每個作者只出現一次。
請注意,distinct()
方法在某些資料庫上可能不支援,例如 MySQL。在這些資料庫上,你需要使用其他的方法來刪除重複的行,例如使用 group_by
。
另外,distinct()
方法只能用於查詢集(QuerySet),不能用於模型的例項。如果你嘗試在一個模型的例項上呼叫 distinct()
,你會得到一個 AttributeError
。
Django ORM 中values方法
在 Django ORM 中,values()
方法用於返回一個包含特定欄位值的字典,而不是模型例項。
例如,如果你有一個 Blog
模型,每個 Blog
物件有一個 title
和 author
欄位,你可以使用以下的程式碼來獲取所有部落格的標題和作者:
blogs = Blog.objects.values('title', 'author')
在這個例子中,blogs
是一個字典的列表,每個字典包含一個部落格的標題和作者。例如:
[{'title': 'First Blog', 'author': 'John'}, {'title': 'Second Blog', 'author': 'Jane'}]
如果你不傳遞任何引數給 values()
,它會返回所有欄位的值:
blogs = Blog.objects.values()
在這個例子中,blogs
是一個字典的列表,每個字典包含一個部落格的所有欄位。
values()
方法通常用於當你只需要一部分欄位的值,而不需要整個模型例項時。它也可以用於聚合查詢,例如計算每個作者的部落格數量。
為Form重寫提交事件
你可以透過新增一個 onsubmit
屬性到 form
標籤來新增一個提交函式。這個屬性的值應該是你想要在表單提交時執行的 JavaScript 函式的名稱。
首先,你需要在你的 HTML 檔案中定義這個函式。你可以將它放在一個 <script>
標籤中,例如:
<script>
function submitForm(event) {
event.preventDefault(); // 阻止表單的預設提交行為
var topic = document.getElementById('newtopic').value;
// 在這裡新增你的程式碼,例如傳送一個 AJAX 請求
}
</script>
然後,你可以將 onsubmit
屬性新增到 form
標籤:
<form role="form text-left" onsubmit="submitForm(event)">
在這個例子中,當使用者提交表單時,瀏覽器會執行 submitForm
函式。event
引數是一個 Event
物件,包含了事件的資訊。在 submitForm
函式中,你可以使用 event.preventDefault()
來阻止表單的預設提交行為,然後獲取使用者輸入的主題,並執行你的程式碼。