Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.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 如何存储前导零';他在Django_Python_Django - Fatal编程技术网

Python 如何存储前导零';他在Django

Python 如何存储前导零';他在Django,python,django,Python,Django,我目前正在为我的网站制作一个查看计数器,我将让它支持从0到9999之间的任何位置的计数。我还希望视图计数始终显示前导零,因此如果有8个视图,它将显示为0008。我遇到的问题是,我的模型会自动删除任何前导零,我不知道如何删除它。如果有人能帮我,那就太好了,如果这个数字被存储为0008,我认为我的+1方法还能用吗?干杯 视图- def listing(request, pk): job_listing = JobListing.objects.get(pk=pk) def vie

我目前正在为我的网站制作一个查看计数器,我将让它支持从0到9999之间的任何位置的计数。我还希望视图计数始终显示前导零,因此如果有8个视图,它将显示为0008。我遇到的问题是,我的模型会自动删除任何前导零,我不知道如何删除它。如果有人能帮我,那就太好了,如果这个数字被存储为0008,我认为我的+1方法还能用吗?干杯

视图-

def listing(request, pk):

    job_listing = JobListing.objects.get(pk=pk)

    def view_counter():
        view_count = job_listing.listing_view_counter
        job_listing.listing_view_counter = view_count + 1
        job_listing.save()

    view_counter()

    context_dict = {'joblistings': job_listing}

    return render(request, 'listing.html', context_dict)
模型-

class JobListing(models.Model):

    region_choice = (
        ('Auckland', 'Auckland'),
        ('Wellington', 'Wellington'),
        ('Christchurch', 'Christchurch')
    )
    industry_choice = (
        ('Accounting', 'Accounting'),
        ('Agriculture, fishing & forestry', 'Agriculture, fishing & forestry'),
        ('Automotive', 'Automotive'),
        ('Banking, finance & insurance', 'Banking, finance & insurance'),
        ('Construction & Architecture', 'Construction & Architecture'),
        ('Customer service', 'Customer service'),
    )
    employment_type_choice = (
        ('Full Time', 'Full Time'),
        ('Part Time', 'Part Time'),
        ('One-off', 'One-off'),
        ('Other', 'Other')
    )

    user = models.CharField(max_length=50)
    job_title = models.CharField(max_length=30)
    pay_rate = models.DecimalField(max_digits=10, decimal_places=2)
    employment_type = models.CharField(max_length=10, choices=employment_type_choice)
    job_description = models.CharField(max_length=2000)
    business_address_region = models.CharField(max_length=50, choices=region_choice)
    business_address_suburb = models.CharField(max_length=50)
    business_industry = models.CharField(max_length=50, choices=industry_choice)
    email = models.EmailField(max_length=50, blank=True, null="True")
    telephone = models.IntegerField(blank=True, null='True')
    listing_view_counter = models.IntegerField(default=0)
    active_listing = models.BooleanField(default=True)

    class Meta:
        verbose_name = 'Job Listing'

    def clean(self):
        if not (self.email or self.telep

hone):
            raise ValidationError("You must specify either email or telephone")
        if not self.email:
            self.email = "Not Provided"

def __unicode__(self):
    return "%s" % self.job_title

你对自己太苛刻了。按原样将数据存储在代码中(作为数字),并在模板中添加0填充


对于一些代码示例,您可以这样做。

实际上不存储前导零,但您可以将
属性
添加到
作业列表
模型中

@property
def view_counter_display(self):
    return str(self.listing_view_counter).zfill(4)
然后,您可以在模板中以
{{obj.view\u counter\u display}}
的形式访问它

或者只使用内置过滤器

您可以使用模板过滤器对模板内的数字应用填充

例如:

{{ job_listing.listing_view_counter|stringformat:"04d" }}

我已经使用了你的答案,看起来效果不错,谢谢!对于其他有这个问题的人来说,我不确定保罗·贝科特的答案是否是解决这个问题的“更好”方法。我之所以选择这个,是因为它更简单。使用内置Python字符串格式(或zfill),无论是使用现有的模板过滤器、创建自己的模板过滤器,还是将其添加到视图中,都比按照Paul解决方案中的代码段所述,尝试自己手动填充字符串要好。对该片段的评论也表明了这一点。抱歉!就在我发布我的评论后,我看到了你的评论。
{{ job_listing.listing_view_counter|stringformat:"04d" }}