小编Den*_*nov的帖子

在VS Code中将Python linter与Docker结合使用

当Python和所有软件包安装在Docker容器中时,我正在尝试使Python linters在VS Code中工作。

我以前没有用过短绒。但是据我所知,短绒如何工作(至少在VS Code中),我需要将VS Code指向Python解释器,并在需要时设置包的路径。如果一切都安装在Docker容器中,这将成为一个问题。

我正在尝试仅使用Docker功能。我想到的是以下内容:

  1. 将安装的Python目录绑定到某个本地文件夹
  2. 从该文件夹中的VS Code中选择Python解释器
  3. 如果需要,以类似的方式添加已安装软件包的目录(但是我还没有达到这个阶段)

我尝试使用Docker文档中的Django示例项目来实现所有功能,因此我的文件如下所示

docker-compose.yml

version: '3'

services:
    db:
        image: postgres
    web:
        build: .
        command: python3 manage.py runserver 0.0.0.0:8000
        volumes:
        - .:/code
        - ./.vscode/python:/usr/local/lib/python3.7  # The problem is here
        ports:
        - "8000:8000"
        depends_on:
        - db
Run Code Online (Sandbox Code Playgroud)

Dockerfile

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
Run Code Online (Sandbox Code Playgroud)

requirements.txt

Django
psycopg2
Run Code Online (Sandbox Code Playgroud)

- ./.vscode/python:/usr/local/lib/python3.7注释行时,Django项目有效。但是,当我尝试以与安装文件夹相同的方式绑定安装Python文件/code夹时,我不仅没有本地可访问此文件夹的内容,而且Django项目停止工作。

是否可以通过这种方式挂载Python可执行文件?也许有更好的方法在使用VS Code和Docker时使用任意的Python linter?最好避免:

  • 在本地创建与Docker容器中相同的环境
  • 安装不允许使用任意lint的扩展

python lint pylint docker visual-studio-code

10
推荐指数
1
解决办法
2625
查看次数

Django 中 urls.py 中 app_name 的目的是什么?

include()从 Django 应用程序到项目的 urlconf 时urls.py,某种应用程序的名称(或命名空间)应指定为:

  • app_namespaceinclude((pattern_list, app_namespace), namespace=None)urls.py

或者

  • app_name应用程序中的变量urls.py

因为,我猜是 Django 2,第二种方法是首选方法,尽管我从 Django 3 文档中复制粘贴了第一个函数签名。但这不是重点。

我目前对namespace参数的理解include()是它是我在使用reverse().

app_namein app'surls.pyapp_namespacein main的目的是什么urls.py
这些是完全一样的吗?
Django 如何使用它?

我在这里找到的现有问题(和答案)解释了我应该如何指定它而不是为什么。

django django-urls

7
推荐指数
1
解决办法
3255
查看次数

Django-“ WhereNode”对象没有属性“ output_field”错误

我正在尝试查询和注释模型中的一些数据:

class Feed(models.Model):     # Feed of content
    user = models.ForeignKey(User, on_delete=models.CASCADE)

class Piece(models.Model):    # Piece of content (video or playlist)
    removed = models.BooleanField(default=False)
    feed    = models.ForeignKey(Feed, on_delete=models.CASCADE)
    user    = models.ForeignKey(User, on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)

在以下查询中未使用其他字段,因此在此跳过了它们。

在我看来,我需要获取经过身份验证的用户的所有供稿的queryset。批注应包含所有未删除的数量。

最初,Piece模型不包含removed字段,并且一切都可以与queryset一起运行,如下所示:

Feed.objects.filter(user=self.request.user).annotate(Count('piece'))
Run Code Online (Sandbox Code Playgroud)

但是随后我将字段添加removedPiece模型中,只需要计算未删除的部分

Feed.objects.filter(user=self.request.user)
            .annotate(Count('piece'), filter=Q(piece__removed=False))
Run Code Online (Sandbox Code Playgroud)

它给了我以下错误:

'WhereNode' object has no attribute 'output_field'
Run Code Online (Sandbox Code Playgroud)

这只是django在错误页面上输出的内容的一小部分,因此,如果这还不够的话,请告诉我我需要在问题中包含的内容。

我试图在这里和那里包含output_field诸如models.IntegerField()models.FloatField()(正确导入)之类的选项,但是出现了一些我未在此处提供的错误,因为我认为这些操作没有意义。

我正在使用Django 2.0.3

django django-models django-aggregation django-annotate django-2.0

6
推荐指数
1
解决办法
1756
查看次数