如何在views.py[Django]中传递可选参数

如何在views.py[Django]中传递可选参数,django,django-views,django-templates,Django,Django Views,Django Templates,URL.py: def shopgrid(request, proname=None): products = Product.objects.all() categories = Categories.objects.all() recent_products = Product.objects.order_by('-date')[0:3] if proname != None: products = Product.objects.filter

URL.py:

def shopgrid(request, proname=None):
    products = Product.objects.all()
    categories = Categories.objects.all()
    recent_products = Product.objects.order_by('-date')[0:3]
    if proname != None:
        products = Product.objects.filter(categorie__title=proname)
    
    if request.method == "GET":
        recent = request.GET.get('val')
        amount = request.GET.get('amount')
        print('This is amount--->',amount)

        if recent == 'name':
            products = Product.objects.order_by('name')
        if recent == 'price':
            products = Product.objects.order_by('-price')

    if  'val' in request.GET:
        check_values = request.GET.getlist('val')
        first_element=check_values[0]
        last_element=check_values[-1]
        fe = first_element[0:4]
        le = last_element[-4:]
        min_price = int(fe)
        max_price = int(le)

        products = Product.objects.filter(price__range=(min_price, max_price))
        print(products)
            
    context={'p':products, 'rp':recent_products, 'cat':categories}
    return render(request, 'cart/shop-grid.html', context)
urlpatterns = [
    path('', views.index, name="index"),
    path('shopgrid/', views.shopgrid, name="shopgrids"),
    path('shopgrid/<str:proname>/', views.shopgrid, name="shopgrid"),
    path('cat_sort/<str:proname>/', views.cat_sort, name="cat_sort"),
]
URL.py:

def shopgrid(request, proname=None):
    products = Product.objects.all()
    categories = Categories.objects.all()
    recent_products = Product.objects.order_by('-date')[0:3]
    if proname != None:
        products = Product.objects.filter(categorie__title=proname)
    
    if request.method == "GET":
        recent = request.GET.get('val')
        amount = request.GET.get('amount')
        print('This is amount--->',amount)

        if recent == 'name':
            products = Product.objects.order_by('name')
        if recent == 'price':
            products = Product.objects.order_by('-price')

    if  'val' in request.GET:
        check_values = request.GET.getlist('val')
        first_element=check_values[0]
        last_element=check_values[-1]
        fe = first_element[0:4]
        le = last_element[-4:]
        min_price = int(fe)
        max_price = int(le)

        products = Product.objects.filter(price__range=(min_price, max_price))
        print(products)
            
    context={'p':products, 'rp':recent_products, 'cat':categories}
    return render(request, 'cart/shop-grid.html', context)
urlpatterns = [
    path('', views.index, name="index"),
    path('shopgrid/', views.shopgrid, name="shopgrids"),
    path('shopgrid/<str:proname>/', views.shopgrid, name="shopgrid"),
    path('cat_sort/<str:proname>/', views.cat_sort, name="cat_sort"),
]
urlpatterns=[
路径(“”,views.index,name=“index”),
路径('shopgrid/',views.shopgrid,name=“shopgrids”),
路径('shopgrid/',views.shopgrid,name=“shopgrid”),
路径('cat\u sort/',views.cat\u sort,name=“cat\u sort”),
]
错误:

**Reverse for 'shopgrid' with no arguments not found. 1 pattern(s) tried: ['shopgrid/(?P<proname>[^/]+)/$']**

<form id="priceform" action="**{% url 'shopgrid' %}**" method="GET">
{% csrf_token %}
<input type="text" id="amount" name="amount" placeholder="Add Your Price">                      
</form>
**找不到任何参数的“shopgrid”的反向。尝试了1个模式:['shopgrid/(?P[^/]+)/$']**
{%csrf_令牌%}
def shopgrid(请求,proname=None): proname是一个可选参数。问题是如何在Jinja模板中编写可选参数。 我已经编写了proname=None,但我只面临错误HTML

没有参数的视图名称是
shopgrids
,因此url应该是:

<form id="priceform" action="{% url 'shopgrids' %}" method="GET">
    {% csrf_token %}
    <input type="text" id="amount" name="amount" placeholder="Add Your Price">
</form>

{%csrf_令牌%}