Django vs Mithril url路由

时间:2018-03-25 23:44:36

标签: django mithril.js

我正在使用Mithril路由。当我通过javascript路由到mysite.com/subpage/item3时,静态文件' /static/app.bundle.js'仍然加载,并按预期显示子页面html。

m.route(document.body, "/", {
    "/": Home,
    "/subpage": Subpage,
    "/subpage/:focus": Subpage,
    "/:focus": Home
});

然而,当我从初始页面加载导航到mysite.com/subpage/item3时,Django开始尝试从' /subpage/static/app.bundle.js'加载静态文件;代替。这导致404错误。我已经设置了STATIC_URL和STATICFILES_DIRS,我不明白为什么Django会改变它们。

这是我的网址模式:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index, name='index'),
    path('<url>', views.index, name='index'),
    path('<url>/<suburl>', views.index, name='index')
]

这是我的静态文件设置:

STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)

谢谢!

1 个答案:

答案 0 :(得分:1)

您的<script> src属性包含相对网址,这是您看到的行为。这就是HTML的工作原理。要“修复”它,请将其设为绝对:

<script type="text/javascript" src="/static/app.bundle.js" type="module"></script>
                                    ^----add this

手动构建URL的缺点是完全绕过Django的STATIC_URL设置,并阻止您在生产中透明地切换到不同的URL。我建议你阅读static files上的Django文档。最后,您将能够这样做:

<script type="text/javascript" src="{% static "app.bundle.js" %}" type="module"></script>