2016-08-17 57 views
0

我很抱歉,如果問題很蠢,我是這個新手。我正在創建一個Django的Web應用程序。我在裏面創建了一個表單。當我提交表單時,即使在打開表單時第一次加載相同的URL,也會顯示找不到'網址'。這是令我困惑的。這裏是我的代碼:Django網址未能在提交表格中找到

#forms.py 
class Recipe_ruleForm(forms.ModelForm): 
    class Meta: 
     model = Recipe_rule 
     fields = ('content',) 

#urls.py 

    url(r"^create_recipe_rule/(?P<recipe_pk>[0-9]+)/$",views.create_recipe_rule, name="create_recipe_rule"), 

#views.py 
def create_recipe_rule(request, recipe_pk): 
    form = Knowledgebase_ruleForm 
    selected_recipe = Recipe.objects.get(pk = recipe_pk) 
    if request.method == 'POST': 
      form = Recipe_ruleForm(request.POST) 
      if form.is_valid(): 
       #current_user = request.user 
       data = form.cleaned_data 
       recipe_rule_data=Recipe_rule.objects.create(recipe=selected_recipe, content=data['content']) 
       recipe_rule_data.save() 
       recipe_rule = Recipe_rule.objects.get(pk = recipe_rule_data.pk) 
       recipe=selected_recipe 
       recipe = Recipe.objects.get(pk = recipe.pk) 
       return redirect('recipe_detail', pk=recipe.pk) 
      else: 
       messages.error(request, "Error") 
    return render(request, 'create_recipe_rule.html' , {'form': form}) 

以下是錯誤當我提交表單:

找不到網頁(404)請求方法:POST請求 網址:http://[ip_adress]:[port]/create_recipe_rule/

更新:

這是我的模板:

{% extends "account/base.html" %} 

{% load i18n %} 
{% load bootstrap %} 

{% block body_class %}applications{% endblock %} 

{% block head_title %}{% trans "Create recipe" %}{% endblock %} 

{% block body %} 




<form action="/create_recipe_rule/" method="post"> 
{% csrf_token %} 




<div class="form-group"> 
<label for="{{ form.content.label }}">{{ form.content.label }}:</label> 
<textarea type="{{ form.content.type }}" name="{{ form.content.name }}" max_length="500" class="form-control" id="{{ form.content.id }}"></textarea> 
</div> 




    <input class="btn btn-default" type="submit" value="submit"> 
</form> 
{% endblock %} 
+0

你的正則表達式匹配的URL,比如'/ create_recipe_rule/5 /',但網址從你的錯誤信息'/ create_recipe_rule /'缺少'recipe_pk'參數。請顯示您的模板,它可能會提示問題是什麼。 – Alasdair

+1

什麼是您的表單的操作屬性設置爲?錯誤消息是說http:// [ip_adress]:[port]/create_recipe_rule /找不到,這是因爲它沒有在最後附加主鍵值。您的urls.py中的URL聲明最後需要一個pk值。 – user4426017

+0

我已經在這裏發佈我的模板了,請告訴我這個 – Elisha512

回答

1

您有action="/create_recipe_rule/",它缺少配方ID。

一種選擇是從表單中簡單地刪除動作,然後瀏覽器將提交請求到當前的URL。

<form method="post"> 

如果你想在表中包括的動作,那麼首先你需要更新您的視圖,以便它包括在模板上下文中的配方ID。

return render(request, 'create_recipe_rule.html' , {'form': form, recipe_id: recipe_id }) 

然後,您可以更新表單操作以包含配方ID。

action="/create_recipe_rule/{{ recipe_id }}" 

它使用{% url %}標籤很好的做法,這樣,你是不是在模板中硬編碼的URL:

action="{% url 'create_recipe_rule' recipe_id %}" 
+0

這個修復了它!非常感謝! @Alasdair – Elisha512