Django为表单中的两个提交按钮呈现不同的模板

时间:2016-09-29 04:39:35

标签: python django forms django-templates

我是Django开发的初学者,我正在尝试制作食物日记应用程序。用户在index.html上输入电子邮件后,应根据他点击的任何按钮呈现另一个网页。

我可以添加两个模板,但如果用户手动输入/apps/<user_email>/addDiaryEntry/等有效网址,我也希望我的应用能够正常运行。我不知道在/apps/urls.py中要添加什么。另外,我可以以某种方式访问​​用户对象的ID,以便我的路由网址变为/apps/<user_id>/addDiaryEntry/吗?

/templates/apps/index.html

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

<label for="email_add">Email address</label>
<input id="email_add" type="text">

<button type="submit" name="add_entry">Add entry</button>
<button type="submit" name="see_history">See history</button>

/apps/views.py

def index(request):
    if request.POST:
        if 'add_entry' in request.POST:
            addDiaryEntry(request)
        elif 'see_history' in request.POST:
            seeHistory(request)

    return render(request, 'apps/index.html');

def addDiaryEntry(request):
    print ("Add entry")

def seeHistory(request):
    print ("See history")

/apps/urls.py

urlpatterns = [
    url(r'^$', views.index, name='index'),
]

感谢您的帮助!请随意分享我没有遵循的任何最佳实践。

1 个答案:

答案 0 :(得分:0)

1)将参数传入url,可以使用regex组传递参数。以下是使用kwarg的示例:

url(r'^(?P<user_email>[^@]+@[^@]+\.[^@]+)/addDiaryEntry/$', views.add_diary, name='add-diary-entry'),

2)根据按下的按钮,只渲染不同的模板:

def index(request):
    if request.POST:
        if 'add_entry' in request.POST:
            addDiaryEntry(request)
            return render(request, 'apps/add_entry.html');

        elif 'see_history' in request.POST:
            seeHistory(request)
            return render(request, 'apps/see_history.html');

开始时总是很难,请确保您花时间浏览文档,这里有一些关于这些主题的地方: https://docs.djangoproject.com/en/1.10/topics/http/urls/#named-groups https://docs.djangoproject.com/en/1.10/topics/http/views/