『壹』 过滤器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