django - url标签不起作用

Posted

技术标签:

【中文标题】django - url标签不起作用【英文标题】:django - url tag not working 【发布时间】:2013-05-21 01:51:37 【问题描述】:

我有这个表格:

<form action="% url create_question %" method="post">

还有这个 url.py

url(r'^neues_thema/(\w+)/','home.views.create_question',name="create_question"),

但我收到此错误:

Reverse for 'create_question' with arguments '()'
 and keyword arguments '' not found.

我做错了什么?

编辑:我要做的是:用户提交表单,我想获取用户正在创建的问题的标题并将其放入 url。然后 url 看起来像:neues_thema/how-to-make-bread/。如何在提交表单时动态将该参数提供给% url create_question ??? %

这个线程url template tag in django template 没有帮助我。

【问题讨论】:

哪个版本的 Django? 您希望在提交带有字段question == "如何制作面包"的表单后将用户重定向到neues_thema/how-to-make-bread/ @imkost,是的,几乎,带有字段标题。 【参考方案1】:

你的 url 正则表达式需要一个参数,你的模板应该是这样的:

<form action="% url create_question some_user_name %" method="post">

See url on Built-in template tags and filters docs

【讨论】:

从 url 中删除参数:url(r'^neues_thema/$','home.views.c... 但是,我想要这样的网址:neues_thema/blablablablabla 模板与url一致。要生成neues_thema/blablablablabla,你应该在模板中写% url create_question "blablablablabla" % 我可以动态给blbalablab吗? @doniyor 你想要 url 中的参数并且不想使用参数来构建 url?【参考方案2】:

你可以这样做:

url(r'^neues_thema/(?P<user>\w*)$','home.views.create_question',name="create_question"),

在你看来

def create_question(request, user=None):

【讨论】:

我在想……确定这是一种避免 OP 错误的方法吗?我还没有测试过,但是,我认为当正则表达式为W* 时,django 也会丢失参数。你测试了吗? 仍然需要参数 @danihp 它不会。这就是我们在末尾添加$ 的原因。 我知道它不起作用 - 您是否遇到同样的错误? 是的。同样的错误@karthikr。有没有正则表达式可以做到这一点:word_(\w*) 应该在视图中调用函数函数?【参考方案3】:

这样写% url 'home.views.create_question' alhphanumeric_work %。它应该可以工作。

【讨论】:

alphanumeric_work 是您已传递给模板的变量。抱歉,在网址中没有看到 (w) 标记。您必须像我在上面所做的那样将字母数字代码作为变量或字符串 不能动态地做到这一点。这就是现在的问题。 你为什么不能动态地做到这一点。它是一个变量,所以只需动态设置该值。【参考方案4】:

您的模板中似乎不需要% url % 的任何参数。

您可以在views.py 中添加创建问题的功能,成功后会将用户重定向到问题页面:

urls.py:

url(r'^neues_thema/', 'home.views.create_question', name="create_question"),
url(r'^neues_thema/(?P<title>\w+)/', 'home.views.question', name="question"),

views.py:

from django.core.urlresolvers import reverse
from django.shortcuts import render

def create_question(request):
    if request.method == 'POST':
        title = request.POST['title']
        # some validation of title
        # create new question with title
        return redirect(reverse('question', kwargs='title': title)


def question(request, title):
    # here smth like: 
    # question = get_object_or_404(Question, title=title)
    return render(request, 'question.html', 'question': question)

带有用于创建问题的表单的模板:

<form action="% url create_question %" method="post">

回答你的“我做错了什么?”。您正在尝试通过掩码 neues_thema/(\w+)/ 呈现 url:% url create_question %。您的掩码需要一些参数((\w+)),但您没有输入任何参数。带参数渲染应该是% url create_question title %。但问题是:渲染页面时你不知道title

【讨论】:

哇!!你说到点子上了!你找到了我的问题!谢谢谢谢 我必须说:为什么我喜欢 django 是因为说 django 的人是如此可爱和诚实,无论遇到什么问题都愿意提供帮助。我以前从未见过这样的社区。我对 django/python 很满意,因为社区让我感到自信。

以上是关于django - url标签不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥 django 中的 Simple 标签不起作用?

Django 1.6.1:静态标签不起作用

Django URL 模式不起作用

用户身份验证模板标签不起作用-Django

JQuery 在 Django 自定义模板标签的模板中不起作用

Django urls uuid 不起作用