【问题标题】:POST Form action not working properly [Django]POST 表单操作无法正常工作 [Django]
【发布时间】:2017-06-07 16:08:56
【问题描述】:

我是 Django 新手,我正在尝试使用以下内容填充 Google 地图标记的 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变量发送到详细视图,以便它可以从数据库中检索请求的信息。问题是,venue_name 被解释为一个字符串,但如果我删除引号,我会得到这个错误:Reverse for 'detail' with arguments '('',)' not found。尝试了 1 种模式:['venuesApp/(?P\w+)/$']

如果我没记错的话,它应该是正确的 sintax,所以我假设它与整个 HTML 代码都在 JS 字符串中这一事实有关。我在 JS 脚本代码之外还有另一个 POST 表单,它工作得很好。

urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^(?P<venue_name>\w+)/$', views.detail, name='detail'),

编辑:

详细视图:

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)

console.log

【问题讨论】:

  • 对不起,我错误地理解了这个问题。你能试试这个'&lt;li&gt;&lt;a href = "{% url ' + "detail" + ' '+ venue_name +' %}"&gt;Ver comentarios&lt;/a&gt;'
  • 当您导航到此页面 localhost:8000/venuesApp/somepage 时会发生什么?
  • 它呈现任何“somepage”的详细信息页面
  • 你能console.log(venue_name) 有时这应该是空的,因此会出错
  • 我在帖子中编辑了一个屏幕截图。似乎在任何时候都不是空的

标签: javascript html django


【解决方案1】:

尝试使用占位符呈现 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>' + 
    '...'

它不是那么优雅,但很有效。

希望这会有所帮助!

【讨论】:

  • 我从 django 调试器中得到以下错误:Reverse for 'detail' with arguments '()' and keyword arguments '{u'venue_name': ''}' not found。尝试了 1 种模式:['venuesApp/(?P\\w+)/$']
  • 到目前为止,我发现解决此问题的唯一方法是手动设置 url,如下所示:'
  • Ver comentarios'+
  • 奇怪,尝试将占位符用引号括起来:"{% url 'detail' venue_name='XXXXX' %}"
  • 似乎也不起作用。这实际上是一个大学作业,去看了我的老师,基本上告诉我手动设置网址。不过很奇怪,应该有一种方法可以使用 Django url
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签