2016-08-17 6 views
0

Приносим извинения, если вопрос глуп, я новичок в этом. Я создаю веб-приложение django. Я создал внутри него форму. Когда я отправляю форму, она говорит, что «url» не найден, даже если один и тот же URL-адрес загружается в первый раз при открытии формы. Это меня пугает. Вот мой код:Django url не найден при отправке формы

#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 запрос URL: 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

Ваше регулярное выражение будет соответствовать URLs как '/ create_recipe_rule/5 /', но URL из вашего сообщения об ошибке '/ create_recipe_rule /' отсутствует аргумент 'recipe_pk'. Пожалуйста, покажите свой шаблон, он может дать подсказку, в чем проблема. – Alasdair

+1

Атрибут действия вашей формы установлен? В сообщении об ошибке говорится, что http: // [ip_adress]: [port]/create_recipe_rule/не может быть найден, и это связано с тем, что в конце не добавлено значение первичного ключа. Объявление вашего URL-адреса в вашем urls.py требует значения pk в конце. – user4426017

+0

Я разместил здесь свой шаблон, пожалуйста, сообщите мне об этом – Elisha512

ответ

1

У вас есть action="/create_recipe_rule/", в котором отсутствует идентификатор рецепта.

Один из вариантов - просто удалить действие из формы, затем ваш браузер отправит запрос на текущий URL-адрес.

<form method="post"> 

Если вы хотите включить в действие формы, то сначала вам нужно обновить свой вид так, что она включает в себя рецепт идентификатор в контексте шаблона.

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

Затем вы можете обновить действие формы, чтобы включить идентификатор рецепта.

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

Это хорошая практика, чтобы использовать {% url %} тег, так что вы не жестко прописывать адреса в шаблоне:

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

, это исправлено! Большое спасибо! @Alasdair – Elisha512

Смежные вопросы