【问题标题】:Tango with Django tutorial : FormsTango 与 Django 教程:表单
【发布时间】:2014-07-06 15:55:24
【问题描述】:

我正在做 7 章节中的练习,我必须在每个类别页面上创建一个添加页面链接,该链接会将用户带到一个新页面,他们可以在该页面上输入名称和 url,如果有问题的类别不存在,它们将被重定向到添加类别页面。

所以步骤是:

1.创建一个新视图(tut 为我们准备好了这个)

def add_page(request, category_name_url):
    context = RequestContext(request)
    category_name = category_name_url.replace('_',' ')
    if request.method == 'POST':
        form = PageForm(request.POST)

        if form.is_valid():
            page = form.save(commit = False)

            try:
                cat = Category.objects.get(name = category_name)
                page.category = cat
            except Category.DoesNotExist:
                return render_to_response('blog/add_category.html', {} , context)

            page.views = 0
            page.save()

            return category(request, category_name_url)
        else:
            print form.errors

   else:
        form = PageForm()

    return render_to_response('blog/add_page.html', {'category_name_url': category_name_url, 'category_name': category_name, 'form': form}, context)

2.新建模板

<!DOCTYPE html>

<html>
    <head>
        <title> Drib </title>
    </head>

    <body>
        <h1>Add Page</h1>

        <form id = 'page_form' method = 'post' action = '/blog/add_page/'>
            {% csrf_token %}
            {%for hidden in forms.hidden_fields%}
                {{hidden}}
            {%for field in forms.visible_fields%}
                {{field}}
                {{field.errors}}
                {{field.help_text}}
            <input type = 'submit' name='Submit' value = "Add Page" />
        </form>
    </body>


</html>

3.URL映射

url(r'^category/(?P<category_name_url>\w+)/add_page/$', views.add_page , name = 'add_page')

4.从类别页面创建一个链接(我只是发布链接,因为没有必要发布整个文件......

<a href="/blog/category/{{category_name_url}}/add_page/"> Add Page</a>

来自 tut 的提示是:

-通过将 category_name_url 插入视图的 context_dict 字典来更新 category() 视图以传递 category_name_url - 完成

  • 使用指向 /rango/category//add_page/ 的链接更新 category.html。确保链接仅在请求的类别存在时出现 - 有或没有页面。 - 我相信我在第 4 步中做到了(虽然不是 100% 肯定)

-使用 URL 映射更新 rango/urls.py 以处理上述链接。(我相信第 3 步)

我的问题是为什么在点击添加页面后我得到了

http://127.0.0.1:8000/blog/category/Python/blog/category/Python/add_page/  

而不是

http://127.0.0.1:8000/blog/category/Python/add_page/

【问题讨论】:

  • &lt;a href="/blog/category/{{category_name_url}}/add_page/"&gt; Add Page&lt;/a&gt; 中添加斜线有帮助吗?
  • 您是否重启了服务器才能看到更改生效?
  • 我收回了...它确实有效,只是我错误地添加了一个符号...

标签: python django macos django-1.6


【解决方案1】:

那是因为

<a href="blog/category/{{category_name_url}}/add_page/"> Add Page</a>

是一个相对链接。这意味着 href 已附加到您当前的路径。

要使其成为绝对路径,只需在前面添加 / 即可为您提供以下内容

<a href="/blog/category/{{category_name_url}}/add_page/"> Add Page</a>
         ^ Here's the leading slash

【讨论】:

  • 您现在知道我得到了添加页面并输入了详细信息,为什么它实际上并没有添加页面?看了看tut是怎么添加add类的,也是按照同样的逻辑,但是不行
【解决方案2】:

要实际添加页面,您可以将form 元素的action 属性从

/blog/add_page/

/blog/category/{{ category_name_url }}/add_page/

【讨论】:

  • 这应该是公认的答案,因为除非 URL 在 urls.py 中匹配,否则实际帖子不会通过
猜你喜欢
  • 2015-05-04
  • 2015-09-20
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 2014-11-25
相关资源
最近更新 更多