2013-05-25 84 views
3

網址標籤我有這樣的形式:Django的 - 不工作

<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 didnot幫助我。

+0

Django的哪個版本? –

+0

@Bibhas,Django 1.4 – doniyor

+0

你希望在提交表單後用'question'字段將用戶重定向到'neues_thema/how-to-make-bread /'==「如何製作麪包」? – imkost

回答

1

似乎你不需要任何參數{% 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 create_question %}。你的面具需要一些參數((\w+)),但你沒有參數。用參數渲染應該是{% url create_question title %}。但問題是:您在渲染頁面時不知道title

+0

哇!你擊中了點人!你確切地發現了我的問題!謝謝你謝謝 – doniyor

+0

@ doniyor,很高興幫助) – imkost

+0

我必須說:爲什麼我愛django是說django的人是如此可愛和誠實,並準備好幫助,無論問題是什麼。我從來沒有見過像這樣的社區。我對django/python非常滿意,因爲社區讓我感到自信。 – doniyor

3

您的網址正則表達式需要一個參數,您的模板應該是這樣的:

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

See url on Built-in template tags and filters docs

+0

從url中刪除參數:'url(r'^ neues_thema/$','home.views.c ...' – danihp

+0

但是,我想要像lok這樣的URL:'neues_thema/blablablablab'' – doniyor

+0

模板應該與url一致。爲了生成'neues_thema/blablablablab',你應該在模板中編寫'{%url create_question'blablablablabla'%}'。 – danihp

2

你可以這樣做:

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

,並在你的意見

def create_question(request, user=None): 
+0

我在想...確定這是避免OP錯誤的方法嗎?我沒有測試過,但是,我認爲當正則表達式是'W *'時,django也會丟失參數。你測試過了嗎? – danihp

+0

仍然需要參數 – doniyor

+0

它是一樣的錯誤? @ doniyor – karthikr

0

這樣寫吧{% url 'home.views.create_question' alhphanumeric_work %}。它應該工作。

+0

不,這是我第一次嘗試。 – doniyor

+0

alphanumeric_work是您傳遞給模板的變量。抱歉,沒有在網址中看到(w)標記。你將不得不把字母數字代碼作爲變量,像我上面所做的那樣,或者字符串 –

+0

不能做到這一點動態。這是現在的問題。 – doniyor