如何在Django中使URL模式接受变量参数?

时间:2014-03-27 21:16:41

标签: django django-models django-views django-urls

我的头衔可能不太清楚。 我现在面临的问题是:

我的视图将任意关键字参数传递给另一个view。 此视图处理哪些信息(它获取的关键字参数)

这是我正在实施的search功能的示例。 每个用户都有一个Saved Searches列表。当他们点击Search list中的任何一个项目时,他们将被定向到处理其收到的信息的不同视图

Searches model中,我定义了一个get_absolute_url方法,该方法构造了每个搜索的URL模式(基于字段中的模型)。

my model:

    class Searches(models.Model):
        SELLER_CHOICES=(('OWNER','owner'),
                        ('DEALER','dealer'),
                        ('BOTH','both'), )
        #search_id = models.IntegerField(primary_key=True)
        user = models.ForeignKey(User)
        make = models.CharField(max_length=100, blank=True)
        model = models.CharField(max_length=100, blank=True)
        keywords = models.CharField(max_length=100, blank=True)
        max_price = models.IntegerField(blank=True, null=True)
        min_price = models.IntegerField(blank=True, null=True)
        max_year = models.IntegerField(blank=True, null=True)
        min_year = models.IntegerField(blank=True, null=True)
        pic_only = models.NullBooleanField()
        search_title_only = models.NullBooleanField()
        owner_dealer_all = models.CharField(max_length=10,choices=SELLER_CHOICES,verbose_name='owner/dealer')
        class Meta:
            #managed = False
            db_table = 'Searches'
            verbose_name_plural = "Searches"

        def __unicode__(self):
            return "%s %s %s-%s" %(self.make,self.model,self.max_year,self.min_year)

        def get_absolute_url(self):
            return reverse('postings.views.detail',args=[model_to_dict(self.object)])

view:

    class SearchListView(ListView):
        model=Searches

template:

    {% extends "base.html" %}
    {% block content %}

    {% for obj in object_list %}
    <p><a href="{{ obj.get_absolute_url }}">{{ obj }}</a></p>
    {% endfor %}

    {% endblock %}

您可以从图片中看到,当我点击your searches时,我收到错误;

Reverse for 'postings.views.detail' with arguments '({'owner_dealer_all': u'DEALER', 'pic_only': True, 'make': u'toyota', u'id': 3, 'min_year': 1990, 'min_price': 4000, 'user': 1, 'keywords': u'hybrid', 'search_title_only': True, 'model': u'prius', 'max_price': 20000, 'max_year': 2012},)' and keyword arguments '{}' not found. 0 pattern(s) tried: []

基本上,我不知道如何在URL模式中处理这个问题。

OR 如果这是一个不好的设计,请请建议一个解决方案 enter image description here

1 个答案:

答案 0 :(得分:0)

如果您确实需要在URL中包含所有变量,那么您需要将变量作为GET查询的参数传递,因此您的URL将如下所示:

http://example.com/search?owner_dealer_all=DEALER&pic_only=True&make=toyota&id=3&min_year=1990&min_price=4000&user=1&keywords=hybrid&search_title_only=True&model=prius&max_price=20000&max_year=2012

但是,我强烈建议您将该URL与Search.get_absolute_url结果分开,因为后者应该指向实际模型。所以让该函数返回类似:

http://example.com/search/23465

其中number是Search模型实例的ID。在该视图中,获取所有已保存的详细信息并对其进行搜索。如果您实际上不需要URL中的数据,只需选择后一版本。