首页 > 解决方案 > Django,使用和不使用参数调用相同的视图函数

问题描述

我想将图像 ID 传递给同一个视图函数,并将图像传递给模板进行显示。

在我的分析应用程序 urls.py 中,我使用过

path('', views.image_analysis, name='home'),
path('<int:id>/', views.image_analysis, name='image_display'),

视图函数是

我应该怎么做才能获得函数中的 id。如果我喜欢 def image_analysis(request, id) 它给出错误。

def image_analysis(request):
    if request.method == 'GET':
        post_id = Image_upload.objects.get(id=id)

    all_images = Image_upload.objects.filter(user=request.user)

    return render(request,
                'analysis/home.html',
                {'images': all_images}
                )

在 home.html 模板文件中。

{% block content %}

<div class="row">
    <div class="col-sm-4">
        <h2>Images</h2>
        <ul class="list-group">
        {% for image in images %}

            <li class="list-group-item"><a href="{% url 'analysis:image_display' image.id %}">{{image.image_name}} -</a> {{image.status}}</li>



        {% endfor %}
        </ul>
    </div>
    <div class="col-sm-8">  Single Image will come here.</div>
  </div>

模板 HTML 文件有 2 个块,左边的一个是用户点击时的所有图像我想在同一个地方显示图像。

你能帮我么。

标签: pythondjango

解决方案


您可以使视图功能如下:

def image_analysis(request, id=None):
    if request.method == 'GET':
        try:
            post_id = Image_upload.objects.get(id=id)
        except:
            <do the logic that you need if id doesnt exist in url>

    all_images = Image_upload.objects.filter(user=request.user)

    return render(request,
                'analysis/home.html',
                {'images': all_images}
                )

如果你在函数定义中给出 id ,那么它总是会寻找给出的,因为它对你来说是可选的,我们把它作为id=None.

id = None在函数内部,您正在使用该 id 执行查询,但显然DB 表中不会有任何查询。因此,如果该except块内的 url 中没有 id,您需要捕获该异常并执行逻辑处理。


推荐阅读