我正在使用django1.10.6并尝试从datatables中的javascript函数生成url
低于网址.py我有一个叫做配置文件设置的页面,比如:
app_name = 'myapp'
urlpatterns = [
url(r'^profile/(?P<pk>[0-9]+)/$', views.ProfileView.as_view(), name='profile'),
]
在javascript中,我有一个django查询将数据发送到一个变量,数据显示在一个带有name和id字段的表上:
^{pr2}$我正在尝试更改URL,以便它将名称链接到类似{%URL'的URLmyapp:配置文件' 数据.id%}. 以上代码为2。在
尝试将其更改为:
return '<a href={% url 'myapp:profile' '+ data.id+ ' %}>' + data.name + '</a>'
但这给出了一个无反向匹配错误Reverse for 'profile' with arguments '('+ data.id+ ',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['profile/(?P<pk>[0-9]+)/$']
还尝试使用replace函数:
return '<a href={% url 'myapp:profile' uid %}>'.replace('uid', data.id) + data.name + '</a>'
但也有同样的错误
因此,我尝试了两种使用JavaScript函数生成URL的解决方案:
第一个生成Django样式{%URL link%},第二个生成硬http://链接。硬链接工作得很好。但是在进行生产时,必须确保更改基url。在
^{pr2}$但是django生成的链接做了一些有趣的事情。在
控制台日志将返回正确的链接,如果您将其粘贴到return中,它将正常工作,但由于django的设置方式,生成的字符串不会返回。在
如果我理解正确的话,我想你应该这样做:
在您当前的表单中,
myapp:profile
将被解释为javascript变量,因为您是由于嵌套的单引号而不加引号的(它不是有效的javascript变量名)。在这不是技术问题,而是理解url在Django和JavaScript中如何工作的问题。记住,模板html文件首先由Django解析和呈现。Django不关心JavaScript语法-它只是将其视为更多的文本。一旦页面被呈现出来,它就会被发送到浏览器,在那里它会被解释并运行JavaScript。而当这个过程正在进行时,Django就完全不可能了。浏览器永远看不到Django模板标记。因此流程有两个不同的阶段-Django模板呈现,然后在浏览器中运行JavaScript。在
当您使用Django
{% url %}
标记时,您要求Django解析并呈现一个URL,它将使用其内置的URL解析器查找该URL。您的profile
url需要一个id变量,您得到的错误消息是Django正在尝试使用您给定的变量解析url,但失败了,这看起来是一个JavaScript字符串连接。同样,Django不理解JS,所以你实际上给了它一堆垃圾字符。在因此,让您的
{% url %}
标记正常工作的唯一方法是给它一个真正的用户id,这正是Django查找相关URL所需要的。但是在您的例子中,Django在JavaScript中选择用户之前不会知道该用户id是什么。在在JavaScript中获取有效url的一些可能方法是:
get_profile_url_for_user
(或其他)API端点,在JS中选择一个用户时,ajax请求将与该用户id一起发送到一个通用url,该url将在Django中进行url解析,并返回该用户配置文件的特定url。如果页面上可能有数百个用户,这将是我的首选方法。在相关问题 更多 >
编程相关推荐