如何摆脱 URL 中的“%20”代码(django)
Posted
技术标签:
【中文标题】如何摆脱 URL 中的“%20”代码(django)【英文标题】:How to get rid of "%20" code in URLs (django) 【发布时间】:2012-03-02 13:15:34 【问题描述】:我正在使用 django 1.3 并进行一些模板继承。离开主页后,我的/static/
设置路径似乎有问题。问题是,当我加载从 base.html 继承的 home.html 时,CSS 和图像链接工作正常。但是一旦我转到一个额外的 URL(在本例中为 vehicle.html),css 和图像就会丢失并出现以下错误:
控制台错误
"GET /static/%20/static/images/logo_2.jpg HTTP/1.1" 404 1771
"GET /static/%20/static/css/default.css HTTP/1.1" 404 1765
查看页面源代码
<link rel="stylesheet" type="text/css" href="/static/ /static/css/default.css">
<link rel="stylesheet" type="text/css" href="/static/ /static/css/default.css">
似乎从某个地方出现了一些空间。此外,从 vehilce.html 文件中,页面源显示它在 url 中添加了一个额外的 /static/
加上空格。我哪里会出错?我的文件见下文:
settings.py
STATIC_ROOT = 'D:/dev/workspace/vehicle_request/vehicle_request/mvmanager/static/'
STATIC_URL = '/static/'
urls.py
urlpatterns = patterns('',
url(r'^$', home_page),
(r'^admin/', include(admin.site.urls)),
(r'^media/(?P<path>.*)$', 'django.views.static.serve','document_root': settings.MEDIA_ROOT), #Not in use in my code yet
(r'^static/(?P<path>.*)$', 'django.views.static.serve','document_root': settings.STATIC_ROOT),
(r'^vehicle/', vehicle),
(r'^driver/', driver),
base.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
<link rel="stylesheet" type="text/css" href="STATIC_URL/static/css/default.css">
<title>% block title %% endblock %</title>
</head>
<body>
<header>
<a href="http://localhost:8000" title="Home Page">
<img src=" STATIC_URL /static/images/logo_2.jpg"
style="float:left; margin:5px" ; border=none"></a><br><br>
<h1>Vehicle Request System <span class="version">(Version 0.1 beta)</span></h1>
</header>
<hr style="clear: left">
<hr>
</body>
</html>
vehicle.html
% extends "base.html" %
% block title %Vehicle Registration% endblock %
% block content %
<html>
<head></head>
<body></body>
</html>
% endblock %
谢谢。
编辑
1. 我已将href="STATIC_URL /static/css/default.css">
中的stati
更改为static
,因为它在我的代码中就是这样。我一定是在发帖时错误地退格了。然而,继续前进,
2. 当我将STATIC_url /Static
更改为STATIC_URL/Static
即。我删除了这两个词之间的空格——正如下面@sarnold 所建议的那样——home.html
照常工作,但vehicle.html
仍然没有加载 css 和图像,它在控制台中显示以下错误:
File "c:\Python27\lib\site-packages\django\core\files\storage.py", line 234, in path
raise SuspiciousOperation("Attempted access to '%s' denied." % name)
SuspiciousOperation: Attempted access to '\static\images\logo_2.jpg' denied.
[10/Feb/2012 06:11:55] "GET /static//static/images/logo_2.jpg HTTP/1.1" 500 1731
File "c:\Python27\lib\site-packages\django\core\files\storage.py", line 234, in path
raise SuspiciousOperation("Attempted access to '%s' denied." % name)
SuspiciousOperation: Attempted access to '\static\css\default.css' denied.
[10/Feb/2012 06:23:29] "GET /static//static/images/logo_2.jpg HTTP/1.1" 500 1731
3. 当我结合@sarnold 和@cptphil 建议时,vehicle.html
完美地加载了 css 和图像。 home.html
但是失败了。请参阅下面对base.html
的更改:
base.html(编辑成这样)
<link rel="stylesheet" type="text/css" href="STATIC_URLcss/default.css">
<img src="STATIC_URLimages/logo_2.jpg"
home.html 现在不起作用! (查看页面源代码)
<link rel="stylesheet" type="text/css" href="css/default.css">
<img src="images/logo_2.jpg"
vehicle.html 现在可以使用(查看页面源代码)
<link rel="stylesheet" type="text/css" href="/static/css/default.css">
<img src="/static/images/logo_2.jpg"
这就是 home.html 在原始形式中的样子
% extends "base.html" %
% block title %GEL: Vehicle Request System% endblock %
% block content %
% endblock %
【问题讨论】:
【参考方案1】:我相信模板引擎正在做你要求它做的事情。
href="STATIC_URL /stati/css/default.css"
正确翻译为
/static/ /stati/css/default.css
试试
href="STATIC_URLcss/default.css"
在 base.html 中,如果你想要的是
/static/css/default.css
无法解释为什么 home.html 会正常工作。
【讨论】:
嘿,有趣的事情:如果我按照你的建议做,vehicle.html
会加载 css 和图像。但是,home.html
无法加载它们!有趣的。你认为是什么问题?仅供参考,所有html
文档都在一个文件夹中,而image
和css
在static
文件夹中各自的文件夹中。
这很有趣。你能发布你的 home.html 代码吗?很难知道可能是什么问题,但这可能会有所帮助。
来自 django 文档:“如果 STATIC_URL 在您的模板中不起作用,您可能在渲染模板时没有使用 RequestContext。”您的 home_page 函数的 render_to_response
是否有可能忽略了 RequestContext
?链接:docs.djangoproject.com/en/dev/howto/static-files/…
看准了! :-) 在我的home_page
视图中,我没有context_instance=RequestContext(request)
条目。我刚刚添加了它,它现在可以工作了!万分感谢。但是,如果我错了,请纠正我:我认为当您的模板中有 POST
时,您只需要 RequestContext
?因此,当我把它放在我的vehicle view
中时,我把它遗漏了。同样,我在'vehicle.html`中有% csrf_token %
,因为它有POST
,但我在home.html
中省略了% csrf_token %
,因为它没有POST
。希望做得对。
很高兴听到这个消息。 RequestContext 只是加载变量并将其传递给模板渲染器的快捷方式,所以如果你在任何地方使用它,你应该在任何地方使用它——与 POST 与 GET 无关。来自文档:“作为一个简短的复习,上下文处理器将变量添加到每个模板的上下文中。但是,上下文处理器要求您在呈现模板时使用 RequestContext。如果您使用通用视图,则会自动发生这种情况,但在编写的视图中手动你需要明确使用 RequestContext"【参考方案2】:
在我看来,您将空格手动添加到 base.html
:
<link rel="stylesheet" type="text/css" href="STATIC_URL /stati/css/defau...
<img src=" STATIC_URL /static/imag....
取出/stati/css
和/static/imag
之前的空格,看看问题是否消失。
【讨论】:
当我按照您的建议进行操作时,我得到一个不同的错误,如上面原始帖子中的edit #2
所示。所以还是不行。谢谢。【参考方案3】:
空格 = %20。请务必从您的网址中省略空格...
like : <script src="% static " js/dashboard/salesPieChart.js" %"></script>
To: <script src="% static "js/dashboard/salesPieChart.js" %"></script>
【讨论】:
以上是关于如何摆脱 URL 中的“%20”代码(django)的主要内容,如果未能解决你的问题,请参考以下文章
如何摆脱 django 中的密码限制(例如,密码必须为 8 个字符,密码不能与用户名过于相似等)
Django Rest API:序列化模型时如何摆脱 json 中的“UUID”?