Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在详细视图中对slug_字段值运行string方法_Python_Django_Django Views - Fatal编程技术网

Python 如何在详细视图中对slug_字段值运行string方法

Python 如何在详细视图中对slug_字段值运行string方法,python,django,django-views,Python,Django,Django Views,我有一个名为food的页面,它获取一个名为food url的参数,该参数需要 用u代替空格 url(r'^food/(?P<food_url>\w+)/$', Food.as_view()), 有没有办法对food_url值运行replace方法?或任何其他解决方案 感谢您,使用基于函数的视图可以更清晰地执行此操作,但是由于您使用的是DetailView,我认为最快的方法是重写此方法。我所做的基本上是获取传入的名称值,并将下划线转换为空格。显然,如果你的名字中包含空格和下划线,这是

我有一个名为food的页面,它获取一个名为food url的参数,该参数需要 用u代替空格

url(r'^food/(?P<food_url>\w+)/$', Food.as_view()),
有没有办法对food_url值运行replace方法?或任何其他解决方案


感谢您,使用基于函数的视图可以更清晰地执行此操作,但是由于您使用的是DetailView,我认为最快的方法是重写此方法。我所做的基本上是获取传入的名称值,并将下划线转换为空格。显然,如果你的名字中包含空格和下划线,这是行不通的,你需要设计一个新的策略来处理这个问题

也就是说,我认为您应该在该模型上创建一个实际的slug字段,并让它slagify
name
字段的值

class Food(DetailView):
    model = Food
    template_name = 'eat/food.html'
    slug_field = 'name'
    slug_url_kwarg = 'food_url'


    def get_object(self, queryset=None):
        """
        Returns the object the view is displaying.

        By default this requires `self.queryset` and a `pk` or `slug` argument
        in the URLconf, but subclasses can override this to return any object.
        """
        # Use a custom queryset if provided; this is required for subclasses
        # like DateDetailView
        if queryset is None:
            queryset = self.get_queryset()

        # Next, try looking up by primary key.
        pk = self.kwargs.get(self.pk_url_kwarg, None)
        slug = self.kwargs.get(self.slug_url_kwarg, None)
        if pk is not None:
            queryset = queryset.filter(pk=pk)

        # Next, try looking up by slug.
        elif slug is not None:

            ###########
            # Convert the underscores into spaces.
            ###########
            slug = slug.replace('_', ' ')
            ###########

            slug_field = self.get_slug_field()
            queryset = queryset.filter(**{slug_field: slug})

        # If none of those are defined, it's an error.
        else:
            raise AttributeError("Generic detail view %s must be called with "
                                 "either an object pk or a slug."
                                 % self.__class__.__name__)

        try:
            # Get the single item from the filtered queryset
            obj = queryset.get()
        except queryset.model.DoesNotExist:
            raise Http404(_("No %(verbose_name)s found matching the query") %
                          {'verbose_name': queryset.model._meta.verbose_name})
        return obj

哪个栏目或模型?它看起来怎么样?
class Food(DetailView):
    model = Food
    template_name = 'eat/food.html'
    slug_field = 'name'
    slug_url_kwarg = 'food_url'


    def get_object(self, queryset=None):
        """
        Returns the object the view is displaying.

        By default this requires `self.queryset` and a `pk` or `slug` argument
        in the URLconf, but subclasses can override this to return any object.
        """
        # Use a custom queryset if provided; this is required for subclasses
        # like DateDetailView
        if queryset is None:
            queryset = self.get_queryset()

        # Next, try looking up by primary key.
        pk = self.kwargs.get(self.pk_url_kwarg, None)
        slug = self.kwargs.get(self.slug_url_kwarg, None)
        if pk is not None:
            queryset = queryset.filter(pk=pk)

        # Next, try looking up by slug.
        elif slug is not None:

            ###########
            # Convert the underscores into spaces.
            ###########
            slug = slug.replace('_', ' ')
            ###########

            slug_field = self.get_slug_field()
            queryset = queryset.filter(**{slug_field: slug})

        # If none of those are defined, it's an error.
        else:
            raise AttributeError("Generic detail view %s must be called with "
                                 "either an object pk or a slug."
                                 % self.__class__.__name__)

        try:
            # Get the single item from the filtered queryset
            obj = queryset.get()
        except queryset.model.DoesNotExist:
            raise Http404(_("No %(verbose_name)s found matching the query") %
                          {'verbose_name': queryset.model._meta.verbose_name})
        return obj