我是 Django 的新手,我正在尝试使用以下内容填充 Google map 标记的 contentString:
for (i=0; i< Object.keys(j).length; i++){
venue_name = j[i]['name']
contentString = '<div id="content">'+
'<div id="siteNotice">'+
'</div>'+
'<h1 id="firstHeading" class="firstHeading">'+j[i]['name']+'</h1>'+
'<div id="bodyContent">'+
'<p><b>'+j[i]['name']+'</b></p>'+
'<p>Attribution: '+j[i]['name']+', <a href="https://www.google.es/#q='+j[i]['name']+" "+city+'">'+
'Más información</a> '+
'</p>'+
'<button onclick="calculateAndDisplayRoute('+ j[i]['lat'] +','+ j[i]['long'] +')">Ir!</button>'+
'<li><a href = "{% url 'detail' 'venue_name' %}">Ver comentarios</a>'+
'</div>'+
'</div>';
主要思想是 href 链接会将 venue_name 变量发送到详细 View ,以便它可以从数据库中检索请求的信息。问题是,venue_name 被解释为字符串,但如果我删除引号,则会收到此错误:未找到带参数 '('',)' 的 'detail' 反转。尝试了 1 种模式:['venuesApp/(?P\w+)/$']
如果我没记错的话应该是正确的语法,所以我假设它与整个 HTML 代码都在 JS 字符串中这一事实有关。我在 JS 脚本代码之外还有另一个 POST 表单,它工作得很好。
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^(?P<venue_name>\w+)/$', views.detail, name='detail'),
编辑:
详细 View :
def detail(request, venue_name):
if request.POST.has_key('text'):
text=request.POST['text']
user=request.user
Review.objects.create(venue=venue_name,user=user,lat_long="",text=text)
try:
p=Review.objects.filter(venue=venue_name)
review_list = list(p.values())
except Review.DoesNotExist:
raise Http404("No reviews available.")
context={ 'review_list':review_list, 'venue_name':venue_name}
return render(request,'venuesApp/detail.html',context)
最佳答案
尝试使用占位符呈现 URL,然后在 javascript 中替换它:
for (i=0; i< Object.keys(j).length; i++){
var venue_url = "{% url 'detail' venue_name=XXXXX %}".replace('XXXXX', j[i]['name']);
contentString = '...' +
'<a href = "' + venue_url + '">Ver comentarios</a>' +
'...'
它不是那么优雅,但很有效。
希望这对您有所帮助!
关于javascript - POST 表单操作无法正常工作 [Django],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44417802/