我目前正在开发一个Django项目,该项目允许用户上传文件(即.dat,.json或.tar.gz),然后将其转换为具有各种关系的相应数据库对象。可以使用Web浏览器上的界面或通过Top 1
将文件上载到相应的REST API端点。该网站目前是一个利用Bootstrap.js的单页网站。浏览器中的URL不会更改用户是否在主页(显示最新上载)或点击其中一个上传的“黑盒子”(“blackbox”是从上传文件形成的主数据库对象)。单击黑盒子会将用户带到黑盒内的“数据点”列表页面。
我现在需要的是每个黑盒页面都有自己的URL,当用户或脚本使用curl
上传黑盒时,可以在响应中返回该URL。这是我想在URLconf中使用的模式:
curl
其中r'^bb/(?P<bb_id>[0-9]+)/$'
是“blackbox”的缩写。如何系统地使每个黑盒页面都遵循此模式,当时每个黑盒页面和主页都具有相同的根URL(在开发中,bb
)?
我在这样的事情上做了一些尝试(很可能是非常误导)。我尝试的一件事是使用localhost:8000
模板标记为黑盒页面制作单独的模板。前端Javascript有一个函数extends
,它接受一个黑盒id并呈现数据点的列表,所以我尝试了各种hacky方法从blackbox中调用该函数(在文件display_points
中)页面模板,但没有成功。我希望能做的一件事是使用jQuery home.html
来做这样的事情:
$.getScript
但是,尽管尝试使用不同的Javascript文件路径,但我仍尝试使用$.getScript('blackboxes.js', function() { //blackboxes.js is the Javascript from home.html that I copied and pasted--hacky, I know
display_points({{ bb_id }});
})
这样的404错误。
此外,如果这是此问题的重要细节,前端利用Clusterize.js来帮助加载数据点,因为黑盒通常至少有数千个数据点。
答案 0 :(得分:0)
制作此类作品的关键之一是在home.html
中使用了正确的模板标记,我们将其重命名为base.html
,以便更好地描述模板的用途。还修改了urls.py
,以便两个不同的网址格式映射到base
中的同一views.py
视图;这两种模式是一个空白&#34;默认主页的模式(即r'^$'
)和查看特定黑盒的模式(r'^blackbox/(?P<bb_id>[0-9]+)/$'
)。将根据URL模式中的bb_id
(黑盒id)是否呈现不同的视图。如果不是,则会呈现最近上传的默认主视图;否则,将呈现该特定bb_id
的数据点。在base.html
模板中,if
模板标记用于查看是否存在bb_id
;如果是这样,将调用JavaScript函数display_bb
,这将使bb_id
知道要显示哪些数据点。否则,将调用函数display_10_recent_blackboxes
。
另一个问题是发送一个回复,其中包含可用于查找和查看刚刚上传的黑盒子的信息。最初,主数据库插入函数insertBlackboxIntoDatabase
将首先创建Blackbox模型实例,然后使用从上载的文件创建的数据点填充它。但是,由于响应是在调用该函数之前发送的,因此有必要重构上传和插入代码,以便首先创建blackbox实例,以便其ID可以作为响应的一部分。然后将ID传递给不同的上传函数(基于文件类型),每个函数最终调用insertBlackboxIntoDatabase
,现在根据传递给它的ID找到Blackbox实例,然后继续创建并插入数据点。