ccs*_*csv 3 javascript python django function
我正在使用 Django 1.10.6 并尝试从数据表中的 javascript 函数生成一个 url
在 url.py 下,我有一个名为 profile setup 的页面,例如:
app_name = 'myapp'
urlpatterns = [
url(r'^profile/(?P<pk>[0-9]+)/$', views.ProfileView.as_view(), name='profile'),
]
Run Code Online (Sandbox Code Playgroud)
在 javascript 中,我有一个 django 查询将数据发送到一个变量,数据显示在带有名称和 ID 字段的表上:
var django_dat =[
{
"id": 1,
"name": "Jack Spicer",
},
{
"id":2,
"name": "Ted Cracker",
}
{
"id":3,
"name": "Justin Rollin",
}
{
"id":4,
"name": "Boaty Boat",
}
];
$(document).ready(function() {
var table = $('#dattable').DataTable({
data: django_dat,
columns: [{
'data': null,
'render': function(data, type, row, meta) {
//Django URL
return '<a href={% url 'myapp:profile' 2 %}>' + data.name + '</a>';}},
{
data: 'id'
}]
});
});
Run Code Online (Sandbox Code Playgroud)
我正在尝试更改 URL,以便将名称链接到类似 {% url 'myapp:profile' data.id %} 的 url。上面的代码被硬编码为 id=2 并且有效。
尝试将其更改为:
return '<a href={% url 'myapp:profile' '+ data.id+ ' %}>' + data.name + '</a>'
Run Code Online (Sandbox Code Playgroud)
但这给出了无反向匹配错误 Reverse for 'profile' with arguments '('+ data.id+ ',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['profile/(?P<pk>[0-9]+)/$']
还尝试使用替换功能:
return '<a href={% url 'myapp:profile' uid %}>'.replace('uid', data.id) + data.name + '</a>'
Run Code Online (Sandbox Code Playgroud)
但得到了同样的错误
这不是技术问题,而是理解 Django 和 JavaScript 中 url 如何工作的问题。请记住,模板 html 文件首先由 Django 解析和呈现。Django 不关心 JavaScript 语法——它只是将其视为更多的文本。一旦页面被呈现,它就会被发送到浏览器,在那里它被解释并运行 JavaScript。当这个过程进行时,Django 完全不在画面中。浏览器永远不会看到 Django 模板标签。所以这个过程有两个不同的阶段 - Django 模板渲染,然后是在浏览器中运行的 JavaScript。
当您使用 Django{% url %}标签时,您是在要求 Django 解析和呈现一个 URL,它将使用其内置的 URL 解析器查找该 URL。您的profileurl 需要一个 id 变量,您收到的错误消息告诉您 Django 正在尝试使用您提供的变量解析 url,但未能解析该 url - 这看起来是一个 JavaScript 字符串连接。同样,Django 不理解 JS,所以你实际上给了它一堆垃圾字符。
所以,让你的{% url %}标签工作的唯一方法是给它一个真实的用户 ID,这是 Django 查找相关 URL 所需要的。但是在您的情况下,在您在 JavaScript 中选择用户之前,Django 不会知道该用户 ID 是什么。
在 JavaScript 中获取有效 url 的一些可能方法是:
get_profile_url_for_user(或其他)API 端点,在 JS 中选择用户时,将使用该用户 ID 向通用 url 发送 ajax 请求,该 url 将在 Django 中进行 url 解析并返回该用户个人资料的特定 url。如果页面上可能有数百个用户,这将是我的首选方法。编辑 - 3 年后回到这个话题 - 我想我在此期间学到了一些东西!还有第四个选项看起来好多了: 4. 假设您的用户数据列表首先来自您的 Django 应用程序 - 您可以在该对象中包含每个用户的个人资料 url,方法是在 Django 应用程序中的任何位置反转 url用户正在被序列化为 JSON。
{
"id":4,
"name": "Boaty Boat",
"profile_url": "http://django-host/profile/4"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1179 次 |
| 最近记录: |