如何让Django管理员的"在网站上查看"链接工作?

mip*_*adi 12 django django-admin django-sites

我已经使用Django应用程序了一段时间,Django管理界面工作得很好,除了 "在网站上查看"链接不起作用.每当我尝试使用它时,我会收到一条OperationalError消息:no such table: django_site.我已经对这个问题进行了一些研究,似乎我必须为这个链接设置Django站点框架才能工作,但我确定如何做到这一点.文档讨论了数据库表等,但它没有说明如何实际设置站点.所以我的问题实际上是双重的:

  1. 如何设置站点框架?我是否必须自己创建表(并自己输入数据),或者我必须启用./manage.py syncdb哪些内容以便自动"检测"我想要设置表格?
  2. 当我在本地开发时(即,只是在localhost上运行而不是在我的实际域名上运行),设置站点框架会影响我吗?请问我要补充的东西settings.py喜欢SITE_ID = 2 if DEBUG else 1,或将manage.py只检测到我正在调试的网站,而不是做网站架构什么?

Art*_*ert 11

get_absolute_url在模型上定义一个 .管理员使用该方法来确定如何构造对象url.查看文档.


mik*_*iku 9

'django.contrib.sites',
Run Code Online (Sandbox Code Playgroud)

进入您的INSTALLED_APPS和以下内容

$ ./manage.py syncdb
Run Code Online (Sandbox Code Playgroud)

可能就够了.

安装后,编辑Site实例(例如,通过/admin界面)以反映您的本地主机名(例如localhost:8000).

  • 虽然我添加了两个站点条目,一个用于生产站点("真实"域名),另一个用于localhost,但这样做了.然后,在settings.py中,如果不是DEBUG,则将SITE_ID设置为1,其中1 =生产,2 = sites表中的localhost.这样,管理站点在本地和生产服务器上都可以工作. (2认同)

Tri*_*tan 7

正如其他人所传达的,除了启用 view_on_site 之外,这还需要几个额外的步骤。您必须在模型中实现 get_absolute_url() ,并在项目设置中启用站点。

设置 view_on_site 设置

将 view_on_site 设置添加到管理表单:

class MymodelAdmin(admin.ModelAdmin):
    ...
    view_on_site = True
...
admin.site.register(Mymodel, MymodelAdmin)
Run Code Online (Sandbox Code Playgroud)

实现 get_absolute_url()

get_absolute_url()添加到您的模型中。在 models.py 中:

Mymodel(models.Model):
    ...
    def get_absolute_url(self):
        return "/mystuff/%i" % self.id
Run Code Online (Sandbox Code Playgroud)

启用站点

在 yourapp/settings.py 中添加站点:

INSTALLED_APPS = (
    ...
    'django.contrib.sites',
    ...
)
Run Code Online (Sandbox Code Playgroud)

然后更新数据库:

$ python manage.py migrate
Run Code Online (Sandbox Code Playgroud)

完毕!

查看reverse(),了解在 get_absolute_url() 中生成路径的更复杂的方法。