2012-07-24 135 views
1

我正在编写有几个小应用程序的django项目。我想使用默认管理网站,所以我的admin.py将会非常简单。不幸的是,如果我把它放到项目目录中,它就不起作用 - 它必须位于app目录中。现在我有两个选择:Django管理站点 - admin.py的位置

  • 把一个admin.py中的应用程序目录中的一个 - 它会工作,但它在逻辑上不正确

  • 在每个应用程序目录

    把几个admin.py文件(只包含从某些应用程序模型)

是否有某种方式来强制Django的寻找这个文件在项目的根目录?

+1

为什么你会不会想这样做的正确方法,即你的第二个选项?有什么好处? – 2012-07-24 09:33:15

+0

我想保持我的项目树尽可能干净。而且这也意味着几次编写相同的“代码”......至少导入“管理员”。 – middleofdreams 2012-07-24 10:15:48

+1

正常程序是在每个应用程序目录中都有一个admin.py。如果你认为这会让你的项目树混乱起来......呃,......这样想吧 - 关键是每个应用程序都是一个独立的单元,可能会被不同的项目使用。因此,每个'admin.py'都需要分开。并认真......从django.contrib导入管理员 - 这实际上不是代码重复。 – scytale 2012-07-24 11:49:08

回答

1

您可以将该文件放入您的“默认”应用程序(创建项目时创建的应用程序)。然后,您可以从其他应用程序导入模型,并在单个admin.py文件中使用它们。例如,下面的文件可以在默认应用程序和“课程”,“论坛”应用程序中使用。

admin.py

from django.contrib import admin 

from models import UserProfile, Sponsor 
from courses.models import Course 
from forum.models import ForumTopic 
admin.site.register(UserProfile) 
admin.site.register(Sponsor) 
class CourseAdmin(admin.ModelAdmin): 
    prepopulated_fields = {"slug": ("code", "name",)} 

admin.site.register(Course, CourseAdmin) 


class ForumTopicAdmin(admin.ModelAdmin): 
    prepopulated_fields = {"slug": ("title",)} 

admin.site.register(ForumTopic, ForumTopicAdmin)