趣奇网

Django 地 ...

↑我也要推荐

django 自定义更改 app 标题和排序的问题

发布时间:2011-06-20 14:02:01, 关注:+20201, 赞美:+7, 不爽:+14

原始出处: 为了不被忘却的纪念

在1.4里面貌似已经有解决方案了。。。就是在settings.py中的install_app的里面,以app()函数的方法添加进去。。。

主要通过模板标签实现的,相关参考:http://djangobook.py3k.cn/2.0/chapter09/

研究了一天django国际化,本来想在app_label里面更改,结果改了syncdb找不到了。最后感觉还是在自定义模板标签里面加个函数解决简单。

用sybase powerdesigner设计数据库,然后通过sqlite3的odbc连接到数据库,生成数据表,然后用manage.py inspectdb > a.txt把model导出来。 

from django.utils.translation import ugettext as _ 
django-admin.py makemessages -l zh_CN
django-admin.py compilemessages

增加一个template filter。

@register.filter
def translabel(value): # Only one argument.
    "Converts a string into a custom app label , usage : sss|traslabel"
    l_keys = {"Company":u"企业管理","Softshare":u"构件管理","Auth":u"授权管理", "Sites":u"站点管理"}
    r = l_keys.get(value);
    if r is None :
        r = value
    return r

在模板里面转换一下就行了,i18n牵扯到数据库里面中英文内容,还是不好做动态的处理。麻烦的很,适合做静态不更新的内容。

app内部model排序的问题:http://djangosnippets.org/snippets/1939/

在 settings.py中增加app和model的排序

ADMIN_REORDER=(   
   ("app_name1",("App1Model1","App1Model2","App1Model3")),
   ("app_name2",("App2Model1","App2Model2")),
)

在templatetag中增加一个admin_reorder_tag.py文件:

# Add as admin_reorder_tag.py in one of your app's templatetag packages
from django import template
from django.conf import settings
from django.utils.datastructures import SortedDict

register = template.Library()

class adminAppNode(template.Node):
    def __init__(self):
        pass
    def render(self, context):
        sort = lambda order, item: (order.index(item), "") if item in order else (len(order), item) 
        if "app_list" in context and len(context["app_list"]) > 1:
            # sort the app list
            order = SortedDict(settings.ADMIN_REORDER)
            context["app_list"].sort(key=lambda app: sort(order.keys(), 
             app["app_url"][:-1]))
            for i, app in enumerate(context["app_list"]):
                # sort the model list for each app
                app_name = app["app_url"][:-1]
                if not app_name:
                    app_name = context["request"].path.strip("/").split("/")[-1]
                model_order = [m.lower() for m in order.get(app_name, [])]
                context["app_list"][i]["models"].sort(key=lambda model: 
                 sort(model_order, model["admin_url"].strip("/").split("/")[-1]))
        return ""

@register.tag
def admin_reorder(parser, token):
    return adminAppNode()

在自己重载的admin/base_site.html中加入tag:

{%extends"admin/base.html"%}
{%loadi18nadmin_reorder_tag%}

{%blocktitle%}{{title}}|{%trans'Django site admin'%}{%endblock%}

{%blockbranding%}
{%admin_reorder%}
<h1id="site-name">{%trans'Django administration'%}</h1>
{%endblock%}

{%blocknav-global%}{%endblock%}

如果你觉得本站对你有帮助,欢迎向本站赞助 :P

使用支付宝捐赠

Copyright© Python4cn(news, jobs) simple-is-better.com, 技术驱动:powered by web.py 空间主机:Webfaction

版权申明:文章转载已注明出处,如有疑问请来信咨询。本站为 python 语言推广公益网站,与 python 官方没有任何关系。

联系/投搞/留言: en.simple.is.better@gmail.com 向本站捐赠