14

我一直在使用 Django 应用程序,并且 Django 管理界面运行良好,除了“现场查看”链接不起作用。每当我尝试使用它时,我都会收到一条OperationalError消息:no such table: django_site. 我已经对此问题进行了一些研究,看来我必须设置Django 站点框架才能使此链接正常工作,但我完全确定如何做到这一点。该文档讨论了数据库表等,但没有说明如何实际设置站点。所以我的问题实际上是双重的:

  1. 如何设置站点框架?我是否必须自己创建表格(并自己输入数据),还是我必须启用某些东西./manage.py syncdb才能自动“检测”我想要设置表格?
  2. 当我在本地开发时(即仅在本地主机上运行而不是在我的实际域名上运行),设置站点框架会影响我吗?我是否必须添加一些settings.py喜欢的东西SITE_ID = 2 if DEBUG else 1,或者manage.py只是检测到我正在调试站点上而不对站点框架做任何事情?
4

6 回答 6

15

在模型上定义 a get_absolute_url。管理员使用该方法来确定如何构造对象 url。请参阅文档

于 2009-05-26T23:10:24.580 回答
9

推杆

'django.contrib.sites',

进入您的 INSTALLED_APPS 和以下内容

$ ./manage.py syncdb

可能就足够了。

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

于 2009-05-26T18:02:08.977 回答
4

正如其他人所传达的,除了启用 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)

实现 get_absolute_url()

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

Mymodel(models.Model):
    ...
    def get_absolute_url(self):
        return "/mystuff/%i" % self.id

启用站点

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

INSTALLED_APPS = (
    ...
    'django.contrib.sites',
    ...
)

然后更新数据库:

$ python manage.py migrate

完毕!

查看reverse()以获得在 get_absolute_url() 中生成路径的更复杂的方法。

于 2017-02-04T16:10:50.240 回答
0

当您在 settings.py 中编辑了 SITE_ID 或管理员认为的站点实例时,请不要忘记重新启动 Web 服务器以使更改生效。

于 2012-07-10T19:44:27.640 回答
0

在我看来,站点功能的视图仅在get_absolute_url引用 Django 视图时才有效。如果您尝试创建一个链接,它似乎不起作用,该链接重定向到 Django 无法控制的页面(即使它是由 apache 本身从同一个域提供的)。

在这种情况下,很容易通过覆盖 admin tempale 手动创建按钮,如下所示:

{% extends "admin/change_form.html" %}
{% block object-tools-items %}
{{ block.super }}
  <li>
    <a class="viewsitelink" href="{{ original.get_absolute_url }}">View on my site, out of Django's control</a>
  </li>
{% endblock %}

另外,添加view_on_site = False到您的ModelAdmin班级,否则两个按钮都会出现。

于 2018-11-18T17:35:40.180 回答
0
于 2020-05-24T01:24:54.270 回答