Django - 为数据库对象的网页生成URL

时间:2016-01-14 19:09:21

标签: javascript python django curl

我目前正在开发一个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来帮助加载数据点,因为黑盒通常至少有数千个数据点。

1 个答案:

答案 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实例,然后继续创建并插入数据点。