『壹』 過濾器Django資料庫包含數組中的任何欄位的值問題,怎麼解決
在某個app下創建一個名為templatetags(必需,且包名不可變)的包。假設我們在名為polls的app下創建了回一個templatetags的包,並在答該包下創建了一個名為mytags的文件。那麼目錄結構看起來應該就像這樣:
polls/
__init__.py
models.py
templatetags/
__init__.py
mytags.py
views.py
『貳』 django使用mongoengine怎麼向mongodb資料庫中提交字典數據,即如何使用mapfiled欄位
models中mongoengine支持有個欄位叫做dictfield,你直接save就好啦,和用mysql是一樣的
『叄』 DJANGO如何關閉去除轉義功能
這個需要用到模板啊,用safe過濾器為單獨的變數關閉自動轉意,用法是這樣的,比如:
模板文件test.html內容關鍵代碼: {{ data|safe }}
下面是視圖文件的關鍵代碼
htmlstr="<img src=/static/images/tree_line.gif />" #保存HTML字元串
return render_to_response('test.html',{data:htmlstr} #返回被渲染的模板顯示
這樣就可以了。
『肆』 如何使用 django.contrib.sitemaps 快速生成網站地圖
Django Admin 不適合最終用戶使用
Django admin是為管理員設計的, 而不是給最終用戶使用的. Django admin的存在是為了方便管理員添加修改刪除數據和管理站點任務.
2. 列表顯示
如上圖, 因為model的默認文本顯示是 xxx object, 所以在admin列表頁中默認顯示的也是xxx object. 如果希望顯示更有用的信息 我們可以進行如下設置:
為model寫__unicode__()方法
如果希望model在列表頁中顯示更多項, 則需要使用list_display
__unicode()__例子:
# models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
slug = models.CharField(max_length=100)
content = models.TextField()
is_published = models.BooleanField(default=False)
def __unicode__(self):
return self.title
# admin.py
from django.contrib import admin
from .models import Article
admin.site.register(Article)
結果:
如果希望顯示其他項:
# admin.py
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'is_published')
admin.site.register(Article, ArticleAdmin)
結果:
3. 為ModelAdmin增加動作
我們可以為ModelAdmin增加method或function, 以此使admin界面更符合我們的需求.
例如, 我們希望在在admin界面中顯示一個明確地URL, 但當我們在model中定義了get_absolute_url()方法後, django admin默認給我們的卻是一個與我們想要的URL完全不同的URL. 於是我們可以通過以下方法定義該URL:
# admin.py
from django.contrib import admin
from django.core.urlresolvers import reverse
from django.utils import format_html
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'is_published',)
readonly_fields = ('show_url',)
def show_url(self, instance):
url = reverse('article_detail', kwargs={'pl': instance.pk})
response = format_html("""<a href="{0}">文章預覽preview</a>""", url)
return response
show_url.short_description = u"文章預覽"
# 顯示HTML tag
# 對於用戶提交的數據, 永遠不要這么設置!
show_url.allow_tags = True
注意, allow_tags屬性, 其默認值是False, 如果錯誤使用將會帶來安全隱患. 如果設置為True,
在admin中會允許顯示HTML tag. 因此我們使用的原則是, 對於用戶輸入的信息, 永遠不設置allow_tags=True.
只有當其內容是系統生成, 用戶無法修改的時, 才能使用allow_tags=True.
4. 不在多用戶編輯環境使用list_editable
django admin為我們提供了在列表頁修改model屬性的功能, 這樣方便管理員一次修改多個屬性. 如果管理員只有一個人的話,
那就沒問題, 但在多用戶環境中時, 卻是會存在一個很嚴重的潛在問題. 因為在list頁提交的修改信息, 記錄的是位置, 而不是model的主鍵.
舉個例子, 文章列表頁默認按照創建順序逆序排列, 用戶A打開文章列表頁, 並開始修改, 同時用戶B增加了一篇新文章, 此時,
當用戶A提交修改後其後的文章信息都會出錯.
『伍』 Django項目使用LDAP的配置問題
僅供參考:
import ldap
from auth_ldap.config import LDAPSearch,PosixGroupType,ActiveDirectoryGroupType
AUTH_LDAP_SERVER_URI = 'ldap://gfacser020.xxxx.com:389'
AUTH_LDAP_BIND_DN = 'cn=test,ou=ldpusers,dc=xxx,dc=com'
AUTH_LDAP_BIND_PASSWORD = "xxxxx"
AUTH_LDAP_USER_SEARCH = LDAPSearch('DC=xxxx,DC=com', ldap.SCOPE_SUBTREE, '(sAMAccountName=%(user)s)',)
# Populate the Django user from the LDAP directory.
AUTH_LDAP_USER_ATTR_MAP = {
'first_name': 'mailNickname',#mailNickname givenName
'email': 'mail',
}
# This is the default
AUTH_LDAP_ALWAYS_UPDATE_USER = False
# Cache group memberships for 5 minutes to rece LDAP traffic
AUTH_LDAP_CACHE_GROUPS = True
AUTH_LDAP_GROUP_CACHE_TIMEOUT = 3600
AUTH_LDAP_GLOBAL_OPTIONS = {
ldap.OPT_X_TLS_REQUIRE_CERT: False,
ldap.OPT_REFERRALS: False,
}
# Keep ModexampleBackend around for per-user permissions and maybe a local superuser.
AUTHENTICATION_BACKENDS = (
'auth_ldap.backend.LDAPBackend',
'django.contrib.auth.backends.ModelBackend',
)
『陸』 Django過濾器truncateword和slice的區別
truncate會在後面加省略號,一般用於文本太長的省略。
slice是對列表,實際是數據截取版,一般用於數據做操作,當權然後面沒有.....
具體到你的truncateword,省略的是詞,和截取字元串差距很大。
『柒』 python中django過濾器,date過濾原則能解釋清楚一些.
https://docs.djangoproject.com
『捌』 描述Django中的中間件執行原理,如何自定義一個過濾返回的中間鍵
1.創建一個模板庫
使用模板過濾器的時候,直接把過濾器寫在app里,
例如:在app里新建一個templatetags的文件夾,這個目錄應當和 models.py 、 views.py 等處於同一層次。例如:
books/ __init__.py models.py templatetags/ views.py
在 templatetags 中創建兩個空文件:一個 __init__.py (告訴Python這是一個包含了Python代碼的包)和一個用來存放你自定義的標簽/過濾器定義的文件。第二個文件的名字稍後將用來載入標簽。例如,如果你的自定義標簽/過濾器在一個叫作 poll_extras.py 的文件中,你需要在模板中寫入如下內容: {% load poll_extras %}
{% load %} 標簽檢查 INSTALLED_APPS 中的設置,僅允許載入已安裝的Django應用程序中的模板庫。
要成為有效的標簽庫,模塊必須包含一個模塊級的變數: register ,這是一個 template.Library 的實例。這個 template.Library 實例是包含所有已注冊的標簽及過濾器的數據結構。因此,在模塊的頂部位置插入下述代碼:
from django import template
register = template.Library()
『玖』 描述Django中的中間件執行原理,如何自定義一個過濾返回的中間鍵。
如果參數只涉及model自身的屬性值, 在模版中可以直接調用,注意,不能加括弧{{entry.def_name}};或者使用property(方法名)函數,將方法的結果變為屬性;new_value = property(_def_name), 使用:{{ entry.new_value }}
如果參數涉及其他變數,建議使用自定義模版過濾器(自己搜);
如果還不能滿足,建議更換模版模塊.
以上基於python2.7 django1.11.18