Skip to content

Conversation

@samueljsb
Copy link
Contributor

This allows us to specify that the default response type for template
views is a TemplateResponse.

N.B. The LogoutView may return a response that is not a template
response (i.e. a redirect), so we annotate it as returning a less
specific type. We have not been more specific about exactly which types
it returns because doing so might require it to also become generic to
support subclasses that return different specific response types.

We could take this further and make more generic view subclasses generic,
but wanted to verify this approach with y'all before pushing too far ahead.

Related issues

Fixes #2873

samueljsb and others added 2 commits October 13, 2025 16:16
This will allow subclasses of `View` to narrow the type of their responses.

Co-authored-by: Charlie Denton <[email protected]>
…sponse type

This allows us to specify that the default response type for template
views is a `TemplateResponse`.

N.B. The `LogoutView` may return a response that is not a template
response (i.e. a redirect), so we annotate it as returning a less
specific type. We have not been more specific about exactly which types
it returns because doing so might require it to also become generic to
support subclasses that return different specific response types.

Co-authored-by: Charlie Denton <[email protected]>
@github-actions
Copy link
Contributor

Diff from mypy_primer, showing the effect of this PR on type check results on a corpus of open source code:

zulip (https://github.com/zulip/zulip)
+ zerver/views/documentation.py:309: error: Signature of "get" incompatible with supertype "django.views.generic.base.TemplateView"  [override]
+ zerver/views/documentation.py:309: note:      Superclass:
+ zerver/views/documentation.py:309: note:          def get(self, request: HttpRequest, *args: Any, **kwargs: Any) -> TemplateResponse
+ zerver/views/documentation.py:309: note:      Subclass:
+ zerver/views/documentation.py:309: note:          def get(self, request: HttpRequest, *args: object, article: str = ..., **kwargs: object) -> HttpResponse

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

as_view always returns a callable that returns a base response, which is not specific enough

1 participant