Tango与Django教程:表单

0 投票
2 回答
1186 浏览
提问于 2025-04-18 12:17

我正在做第7章的练习,要求我在每个分类页面上创建一个“添加页面”的链接,这样用户点击后就能进入一个新页面,在那里可以输入名称和网址,以便添加到特定的分类。如果该分类不存在,用户会被重定向到添加分类的页面。

所以步骤是:

1. 创建一个新的视图(教程中已经给我们准备好了这个视图)

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>

教程中的提示是:

- 更新category()视图,将category_name_url插入到视图的context_dict字典中 - 完成

  • 更新category.html,添加一个指向/rango/category//add_page/的链接。确保这个链接只有在请求的分类存在时才会出现,无论是否有页面。- 我相信我在第4步做到了这一点(不过不太确定)

- 更新rango/urls.py,添加一个URL映射来处理上面的链接。(我认为这是第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/

2 个回答

1

要真正添加页面,你可以把

元素的action属性从

/blog/add_page/

改成

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

这是因为

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

是一个相对链接。这意味着它的链接地址是基于你当前的路径来拼接的。

如果想把它变成绝对路径,只需要在前面加一个 /,这样就变成了:

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

撰写回答