【问题标题】:Django: import-export && GrappelliDjango: 进出口 && Grappelli
【发布时间】:2015-03-27 05:52:20
【问题描述】:

我正在使用 Django 导入导出应用程序,现在我想添加 Grappelli 以改进管理界面。我收到与模板相关的错误。有什么建议可以让他们一起工作吗?

错误:

Environment:


Request Method: GET
Request URL: http://localhost:8000/admin/db_personal/personalinstituto/

Django Version: 1.7c1
Python Version: 2.7.8
Installed Applications:
('grappelli',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'import_export',
 'db_personal')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')


Template error:
In template C:\Gestion AI2\web_nueva\templates\admin\change_list.html, error at line 1
   maximum recursion depth exceeded in __instancecheck__
   1 :  {% extends "admin/change_list.html" %} 


   2 : 


   3 : {# Original template renders object-tools only when has_add_permission is True. #}


   4 : {# This hack allows sub templates to add to object-tools #}


   5 : {% block object-tools %}


   6 :   <ul class="object-tools">


   7 :     {% block object-tools-items %}


   8 :       {% if has_add_permission %}


   9 :         {{ block.super }}


   10 :       {% endif %}


   11 :     {% endblock %}

【问题讨论】:

标签: django django-admin django-grappelli django-import-export


【解决方案1】:

我很好地将它们一起使用。我不得不在 admin/includes_grappelli/header.html 中更改它:

-                    {% url admin:password_change as password_change_url %}
+                    {% url 'admin:password_change' as password_change_url %}

-                    {% url admin:logout as logout_url %}
+                    {% url 'admin:logout' as logout_url %}

-                {% url test-index as testindexurl %}
+                {% url 'test-index' as testindexurl %}

-                {% url django-admindocs-docroot as docsroot %}
+                {% url 'django-admindocs-docroot' as docsroot %}

并使用 ImportExportActionModelAdmin 调用它以避免 CSS 问题。

from import_export.admin import ImportExportActionModelAdmin

class MyModelAdmin(ImportExportActionModelAdmin):
    """
    Admin class for MyModel model
    """
    form = MyModelAdminForm

    list_display = ()
    ordering = []

    resource_class = MyModelResource

希望对你有帮助...

【讨论】:

  • 我找不到 header.html :(
  • 应该在 C:\Gestion AI2\web_nueva\templates\admin\includes_grappelli/github.com/chronossc/django-grappelli/blob/master/grappelli/…
  • 最新版本中没有。
  • 真的!对不起,我在互联网上没有检查。所以这是我的安装,它是这样构建的。我在某人之后继续开发!
  • @Alex_Loar:好吧,我添加了与您相同的问题。 header.html 中的代码示例现在位于 grappelli/templates/admin/base.html 的第 90 行和第 100 行之间。但在我的版本中,已经设置了 HydrUra 建议的更改。检查这些并告诉我们您的发现。 github.com/sehmaschine/django-grappelli/blob/…
【解决方案2】:

好吧,我认为您的问题不在于模板脚本,而在于扩展。 您的模板尝试扩展自身。

templates\admin\change_list.html,第 1 行错误 1 ​​: {% extends "admin/change_list.html" %}

admin/change_list.html 指的是基本的 django 模板 change_list。您的 django-import-export change_list 模板似乎具有相同的路径。来自 django-import-export 的 change_list 模板应该在 template/admin/import_export/change_list.html

【讨论】:

  • 我已将 change_list.html 从 import-export 复制到 C:\Gestion AI2\web_nueva\templates\admin\import_export/change_list.html 但没有任何变化。我也应该更改扩展名吗?
  • @Alex_Loar 抱歉,这不是我的意思。我有点困惑。这个目录 C:\Gestion AI2\web_nueva\templates\ 来自什么应用程序? grappelli 还是进出口?您的错误显示 import-export change_list.html 脚本。所以我首先认为目录 (...web_nueva\templates) 是导入-导出,但现在我不确定了。
【解决方案3】:

我刚刚遇到了同样的问题,这里有一个更循序渐进的方法。

在您的项目中为 import_export 模板创建一个目录,并为 change_list_import 模板添加一个 html 文件。

myproj
├── myproj
│   ├──url.py
│   ├──settings.py
├── manage.py
├── db_personal #myapp
│   ├── admin.py
│   ├── models.py
|   ├── viewss.py
├── templates
|   ├── admin
|   |   ├── import_export
|   |   |   ├── change_list_import.html 
├── dashboard.py

接下来,将以下代码复制到此模板 html 文件中。请注意,它需要扩展 grappelli 更改列表模板,因此引用此模板的位置:

{% extends "C:/Python27/lib/site-packages/grappelli/templates/admin/change_list.html" %}
{% load i18n %}

{% block object-tools-items %}
   <li><a href="import/" class="import_link">{% trans "Import" %}</a></li>
   {{ block.super }}
{% endblock %}

【讨论】:

  • 有没有办法避免硬编码路径到 grappelli 模板?
  • 答案here 提供了一种使用 TEMPLATE_DIRS 控制模板加载顺序的方法
【解决方案4】:

grappelli 需要在 INSTALLED_APPS 中的 import_export 之前。

引用自 https://django-grappelli.readthedocs.io/en/latest/thirdparty.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 2014-02-24
    • 2014-05-12
    • 2012-09-11
    • 2013-02-17
    相关资源
    最近更新 更多