`
zjxplq
  • 浏览: 40558 次
  • 性别: Icon_minigender_1
  • 来自: 绍兴
社区版块
存档分类
最新评论

自定义Admin views与反向解析Django Admin URLs

阅读更多

学习http://www.ianlewis.org/en/reversing-django-admin-urls后记录(翻译了部分)

Django 1.1开始支持 reversing django admin urls 与specifying custom admin views功能

代码如下:

class ItemAdmin(admin.ModelAdmin):
    list_display    = ('title', 'date','published')
    exclude         = ['clean_content',]
    list_filter     = ('feed',)
    search_fields   = ('title','clean_content')
    list_per_page   = 20

    model = Item

    def save_model(self, request, obj, form, change):
        obj.clean_content = strip_tags(obj.content)
        obj.save()

    def admin_update_feeds(self, request):
        from lifestream.feeds import update_feeds
        #TODO: Add better error handling
        update_feeds()
        return HttpResponseRedirect(
                reverse("admin:lifestream_item_changelist")
        )

    def get_urls(self):
        from django.conf.urls.defaults import *
        urls = super(ItemAdmin, self).get_urls()
        my_urls = patterns('',
            url(
                r'update_feeds',
                self.admin_site.admin_view(self.admin_update_feeds),
                name='admin_update_feeds',
            ),
        )
        return my_urls + urls

admin.site.register(Item, ItemAdmin)
 

关键的部分是get_urls函数与admin_update_feeds view.get_urls函数用于增加自定义的url.自定义admin_update_feeds视图函数用于更新lifestream的feeds,并重定向到item的修改列表视图.为了获取这个目标url,使用了reverse()函数,反向解析"admin:lifestream_item_changelist(模式为"<namespace>:<app>_<model>_changelist"),来获取对应的url.

 

模板:

通过重载默认的admin template,创建了一个按钮,用于更新feeds.模板如下:

{% extends "admin/change_list.html" %}
{% load adminmedia admin_list i18n %}

{% block object-tools %}
{% if has_add_permission %}
<ul class="object-tools">
  <li><a href="{% url admin:admin_update_feeds %}">{% blocktrans with cl.opts.verbose_name|escape as name %}Update Items{% endblocktrans %}</a></li>
  <li><a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink">{% blocktrans with cl.opts.verbose_name|escape as name %}Add {{ name }}{% endblocktrans %}</a></li>
</ul>
{% endif %}
{% endblock %}
 

 

这里使用{% url admin:admin_update_feeds %}来获取自定义视图函数的url.


分享到:
评论

相关推荐

    Python Django框架url反向解析实现动态生成对应的url链接示例

    本文将详细分析Django框架URL反向解析的具体原理与应用操作技巧,并提供实例来说明。 首先,我们需要理解Django中的URL配置。在Django项目的urls.py中,我们定义了项目的URL路由配置,如下所示: ```python from ...

    3. Django 初探路由

    URL反向解析 除了在模板中使用`url`模板标签,还可以在视图和Python代码中使用`reverse()`函数来获取URL,这有助于保持URL模式和其引用的一致性。 ### 10. 结论 Django的路由系统是其强大功能的一个关键方面,它...

    django step by step

    使用`django-admin startproject`命令创建一个新的Django项目。理解项目目录结构,包括manage.py、settings.py、urls.py等关键文件的作用。 3. Django应用创建 在项目中创建应用,如`python manage.py startapp ...

    Django 快速实战入门代码压缩包

    2. **创建项目** - 使用`django-admin startproject project_name`命令创建一个新的Django项目,其中`project_name`替换为你的项目名。 3. **配置项目** - 修改`settings.py`文件,添加需要的应用,设置数据库和...

    django网站

    首先,通过`django-admin startproject mysite`命令创建项目,接着可以使用`python manage.py startapp appname`创建应用,如`user_management`,用于实现用户管理功能。 ### 4. 数据库管理 Django的ORM允许开发者...

    Django-Blog:使用Django制作博客

    通过pip安装Django,并创建一个新的项目,使用`django-admin startproject blog_project`命令。接着,创建一个名为"Django-Blog"的应用,运行`python manage.py startapp Django-Blog`。 2. **数据库模型(Model)*...

    Django-1.11.6.tar.gz

    在`views.py`中,定义视图函数,然后在`urls.py`中配置URL模式,将URL映射到相应的视图。 8. **模板系统**:Django的模板系统用于生成HTML响应。在`templates`目录下,创建HTML模板文件,使用模板语言来动态渲染...

    26.3 Django路由层

    - 命名后的URL可以通过`reverse()`函数反向解析,如`reverse('my_view')`。 4. **参数传递** - URL模式可以包含捕获组,以从URL中提取参数传递给视图。例如: ```python path('&lt;int:pk&gt;/', viewsDetailView.as_...

    PythonWeb开发基础教程-第3章-URL分发(1).pptx

    在这个例子中,`admin.site.urls`包含了Django管理站点的URL,而`app1.urls`和`app2.urls`分别对应应用`app1`和`app2`的URL配置。 **3.3 URL参数传递** 在URL模式中,可以使用变量来捕获URL路径的一部分,这些变量...

    django框架1.9.12

    2. **创建项目**:使用`django-admin startproject project_name`命令创建一个新的Django项目。 3. **创建应用**:在项目目录下,使用`python manage.py startapp app_name`创建一个应用。 4. **设置模型**:在...

    个人博客网站源码(python3.6+django2.0+mysql)

    9. 自定义管理界面:Django的内置admin界面允许开发者轻松管理模型实例。通过注册模型并自定义管理类,可以创建一个定制化的后台管理系统,方便对博客内容进行维护。 10. 测试与调试:Django提供了一套强大的测试...

    django_book中文版

    Django项目的结构通常包括管理目录、应用目录、settings.py(配置文件)、urls.py(URL路由)、wsgi.py(WSGI服务器接口)等。理解这些文件的作用是使用Django的基础。 4. 模型(Models): 模型是数据库的抽象层...

    基于Django的web人脸识别登录功能设计与实现-源码

    Django采用模型-视图-控制器(MVC)架构模式,其核心组件包括模型(Models)、视图(Views)、模板(Templates)和URL路由(URLs)。在构建人脸识别登录系统时,我们将创建一个模型来存储用户信息,视图来处理请求和...

    django学习实践简单示例超详细版本源代码

    模板使用Django模板语言(DTL)来展示数据,可以包含变量、控制结构(如for循环和if语句)以及模板标签(如`{% url %}`用于URL反向解析)。 4. **URL路由(URLconfs)**:`learning_log/urls.py`定义了URL模式,每...

    django下创建多个app并设置urls方法

    这里使用了 Django 的 URL 反向解析语法 `{% url '命名空间:视图名称' %}`。 ### 内容扩展:Django 项目下创建多个 App 在实际开发过程中,随着项目复杂度的增加,可能会涉及到更多的 App。为了更好地组织项目结构...

    基于django的人脸检测Web平台搭建(基于Opencv)

    2. **Django项目创建**:使用`django-admin startproject`命令初始化项目,然后创建一个Django应用,如`facedetection`,用于存放我们的核心代码。 3. **API接口设计**:在Django应用中,定义一个视图函数来处理...

    Python Django框架学习笔记

    - **name**:用于反向解析URL的名称。 **2.4 常用命令** - **查看Django版本**:`python -m django --version` - **创建应用**:`python manage.py startapp polls`。这会在当前项目目录下创建一个名为`polls`的...

    django+layui

    4. **数据库模型**:在user_manager应用的models.py文件中,定义用户模型,比如UserProfile,继承自Django的AbstractBaseUser或AbstractUser,以自定义用户字段和行为。 5. **注册模型**:在user_manager应用的...

    HealthCareSys-Django_python_django_

    创建一个Django项目的第一步是安装Django库,然后通过`django-admin startproject HealthCareSys`命令来初始化项目。这将生成一个包含基本目录结构的项目,如`manage.py`、`settings.py`、`urls.py`等文件。 三、...

    Django渗透测试与代码安全漫谈_一_1

    本文将围绕“Django渗透测试与代码安全”这一主题展开,探讨如何确保Django应用的安全性。 首先,安装Django非常简单,只需通过Python的包管理器pip执行`pip install django`即可。一旦安装完毕,就可以创建一个新...

Global site tag (gtag.js) - Google Analytics