我们可以在url-django中传递两个参数吗?

问题描述

这是我的“类别”和“产品”的models.py文件

models.py

from django.db import models
    
# Create your models here.
class Category(models.Model):
        objects = models.Manager()
        name = models.CharField(max_length=250,null=False)
        slug = models.CharField(max_length=250,null=False)
        desc = models.TextField(blank=True)
    
        class Meta:
            verbose_name = 'category'
            verbose_name_plural = 'categories'
    
        def __str__(self):
            return self.name
    
class Product(models.Model):
        objects = models.Manager()
        name = models.CharField(max_length=250,null=False)
        desc = models.TextField(blank=True)
        category = models.ForeignKey(Category,on_delete=models.CASCADE)
    
        class Meta:
            verbose_name = 'product'
            verbose_name_plural = 'products'
    
        def __str__(self):
            return self.name
    

这是我卡住的网址文件

urls.py

from django.urls import path,include
from website import views
urlpatterns = [
        path('',views.home,name='home'),path('categorys/<slug:category_slug>/',views.category_product,name='category_product'),path('category/<slug:category_slug>/<slug:product_slug>',views.product,name='product_slug'),]

是否可以从html传递url中的两个参数,以便我们可以将其传递给乘积函数

views.py

from django.shortcuts import render,get_object_or_404
from website.models import Product,Category
    
def home(request):
        allcategories = Category.objects.all()
        return render(request,'website/home.html',{'allcategories':allcategories})
    
    
def product(request,category_slug,product_slug):
        product = Product.objects.get(category__slug=category_slug,slug=product_slug)
        return render(request,'website/display_product.html',{'product':product})
    
def category_product(request,category_slug):
        current_category = get_object_or_404(Category,slug=category_slug)
        product = Product.objects.filter(category=current_category)
        return render(request,'website/category_product.html',{'current_category':current_category,'product':product})

这是我尝试将两个args传递给urls.py的html页面,但是由于错误而卡住了,请指导我,非常感谢您的帮助,谢谢!

category_product.html

    Category name : {{ current_category.name }} <br>   

    <h3>Products </h3>
    
    {% for p in product %}
        <a href="{% url 'product_slug' arg1=current_category.name arg2=p.slug %}">
            <b>{{ p.name  }}</b>  <br>
        </a>
    {% endfor %}
    
    ## how to pass two args (or is it possible here) so that it will be passed to the urls.py 

解决方法

您已通过category_slugproduct_slug。但是您将arg1和arg2用作参数名称很重要。

category_product.html

Category name : {{ current_category.name }} <br>   
    
<h3>Products </h3>
        
{% for p in product %}
      <a href="{% url 'product_slug' category_slug=current_category.name product_slug=p.slug %}">
          <b>{{ p.name  }}</b>  <br>
       </a>
{% endfor %}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...