Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
D
django
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
django
Commits
5e450c52
Kaydet (Commit)
5e450c52
authored
Eyl 03, 2015
tarafından
Tim Graham
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Removed current_app argument to render() and TemplateResponse().
Per deprecation timeline.
üst
75374d37
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
19 additions
and
175 deletions
+19
-175
shortcuts.py
django/shortcuts.py
+2
-21
context.py
django/template/context.py
+2
-33
defaulttags.py
django/template/defaulttags.py
+2
-14
response.py
django/template/response.py
+3
-12
template-response.txt
docs/ref/template-response.txt
+1
-11
api.txt
docs/ref/templates/api.txt
+1
-6
shortcuts.txt
docs/topics/http/shortcuts.txt
+1
-11
urls.txt
docs/topics/http/urls.txt
+0
-7
tests.py
tests/shortcuts/tests.py
+0
-10
urls.py
tests/shortcuts/urls.py
+0
-2
views.py
tests/shortcuts/views.py
+0
-16
test_incl_tag_current_app.html
...s/template_tests/templates/test_incl_tag_current_app.html
+0
-1
inclusion.py
tests/template_tests/templatetags/inclusion.py
+0
-7
test_custom.py
tests/template_tests/test_custom.py
+1
-17
test_response.py
tests/template_tests/test_response.py
+6
-7
No files found.
django/shortcuts.py
Dosyayı görüntüle @
5e450c52
...
...
@@ -3,9 +3,6 @@ This module collects helper functions and classes that "span" multiple levels
of MVC. In other words, these functions/classes introduce controlled coupling
for convenience's sake.
"""
import
warnings
from
django.core
import
urlresolvers
from
django.db.models.base
import
ModelBase
from
django.db.models.manager
import
Manager
...
...
@@ -14,12 +11,10 @@ from django.http import (
Http404
,
HttpResponse
,
HttpResponsePermanentRedirect
,
HttpResponseRedirect
,
)
from
django.template
import
RequestContext
,
loader
from
django.template.context
import
_current_app_undefined
from
django.template.engine
import
(
_context_instance_undefined
,
_dictionary_undefined
,
_dirs_undefined
,
)
from
django.utils
import
six
from
django.utils.deprecation
import
RemovedInDjango110Warning
from
django.utils.encoding
import
force_text
from
django.utils.functional
import
Promise
...
...
@@ -49,7 +44,7 @@ def render_to_response(template_name, context=None,
def
render
(
request
,
template_name
,
context
=
None
,
context_instance
=
_context_instance_undefined
,
content_type
=
None
,
status
=
None
,
current_app
=
_current_app_undefined
,
content_type
=
None
,
status
=
None
,
dirs
=
_dirs_undefined
,
dictionary
=
_dictionary_undefined
,
using
=
None
):
"""
...
...
@@ -58,32 +53,18 @@ def render(request, template_name, context=None,
Uses a RequestContext by default.
"""
if
(
context_instance
is
_context_instance_undefined
and
current_app
is
_current_app_undefined
and
dirs
is
_dirs_undefined
and
dictionary
is
_dictionary_undefined
):
# No deprecated arguments were passed - use the new code path
# In Django 1.10, request should become a positional argument.
content
=
loader
.
render_to_string
(
template_name
,
context
,
request
=
request
,
using
=
using
)
else
:
# Some deprecated arguments were passed - use the legacy code path
if
context_instance
is
not
_context_instance_undefined
:
if
current_app
is
not
_current_app_undefined
:
raise
ValueError
(
'If you provide a context_instance you must '
'set its current_app before calling render()'
)
pass
else
:
context_instance
=
RequestContext
(
request
)
if
current_app
is
not
_current_app_undefined
:
warnings
.
warn
(
"The current_app argument of render is deprecated. "
"Set the current_app attribute of request instead."
,
RemovedInDjango110Warning
,
stacklevel
=
2
)
request
.
current_app
=
current_app
# Directly set the private attribute to avoid triggering the
# warning in RequestContext.__init__.
context_instance
.
_current_app
=
current_app
content
=
loader
.
render_to_string
(
template_name
,
context
,
context_instance
,
dirs
,
dictionary
,
using
=
using
)
...
...
django/template/context.py
Dosyayı görüntüle @
5e450c52
import
warnings
from
contextlib
import
contextmanager
from
copy
import
copy
from
django.utils.deprecation
import
RemovedInDjango110Warning
# Hard-coded processor for easier use of CSRF protection.
_builtin_context_processors
=
(
'django.template.context_processors.csrf'
,)
_current_app_undefined
=
object
()
class
ContextPopException
(
Exception
):
"pop() has been called more times than push()"
...
...
@@ -135,16 +130,8 @@ class BaseContext(object):
class
Context
(
BaseContext
):
"A stack container for variable context"
def
__init__
(
self
,
dict_
=
None
,
autoescape
=
True
,
current_app
=
_current_app_undefined
,
use_l10n
=
None
,
use_tz
=
None
):
if
current_app
is
not
_current_app_undefined
:
warnings
.
warn
(
"The current_app argument of Context is deprecated. Use "
"RequestContext and set the current_app attribute of its "
"request instead."
,
RemovedInDjango110Warning
,
stacklevel
=
2
)
def
__init__
(
self
,
dict_
=
None
,
autoescape
=
True
,
use_l10n
=
None
,
use_tz
=
None
):
self
.
autoescape
=
autoescape
self
.
_current_app
=
current_app
self
.
use_l10n
=
use_l10n
self
.
use_tz
=
use_tz
self
.
template_name
=
"unknown"
...
...
@@ -154,14 +141,6 @@ class Context(BaseContext):
self
.
template
=
None
super
(
Context
,
self
)
.
__init__
(
dict_
)
@property
def
current_app
(
self
):
return
None
if
self
.
_current_app
is
_current_app_undefined
else
self
.
_current_app
@property
def
is_current_app_set
(
self
):
return
self
.
_current_app
is
not
_current_app_undefined
@contextmanager
def
bind_template
(
self
,
template
):
if
self
.
template
is
not
None
:
...
...
@@ -222,19 +201,9 @@ class RequestContext(Context):
Additional processors can be specified as a list of callables
using the "processors" keyword argument.
"""
def
__init__
(
self
,
request
,
dict_
=
None
,
processors
=
None
,
current_app
=
_current_app_undefined
,
use_l10n
=
None
,
use_tz
=
None
):
# current_app isn't passed here to avoid triggering the deprecation
# warning in Context.__init__.
def
__init__
(
self
,
request
,
dict_
=
None
,
processors
=
None
,
use_l10n
=
None
,
use_tz
=
None
):
super
(
RequestContext
,
self
)
.
__init__
(
dict_
,
use_l10n
=
use_l10n
,
use_tz
=
use_tz
)
if
current_app
is
not
_current_app_undefined
:
warnings
.
warn
(
"The current_app argument of RequestContext is deprecated. "
"Set the current_app attribute of its request instead."
,
RemovedInDjango110Warning
,
stacklevel
=
2
)
self
.
_current_app
=
current_app
self
.
request
=
request
self
.
_processors
=
()
if
processors
is
None
else
tuple
(
processors
)
self
.
_processors_index
=
len
(
self
.
dicts
)
...
...
django/template/defaulttags.py
Dosyayı görüntüle @
5e450c52
...
...
@@ -432,23 +432,11 @@ class URLNode(Node):
smart_text
(
k
,
'ascii'
):
v
.
resolve
(
context
)
for
k
,
v
in
self
.
kwargs
.
items
()
}
view_name
=
self
.
view_name
.
resolve
(
context
)
try
:
current_app
=
context
.
request
.
current_app
current_app
=
context
.
request
.
resolver_match
.
namespace
except
AttributeError
:
# Leave only the else block when the deprecation path for
# Context.current_app completes in Django 1.10.
# Can also remove the Context.is_current_app_set property.
if
context
.
is_current_app_set
:
current_app
=
context
.
current_app
else
:
try
:
current_app
=
context
.
request
.
resolver_match
.
namespace
except
AttributeError
:
current_app
=
None
current_app
=
None
# Try to look up the URL twice: once given the view name, and again
# relative to what we guess is the "main" app. If they both fail,
# re-raise the NoReverseMatch unless we're using the
...
...
django/template/response.py
Dosyayı görüntüle @
5e450c52
...
...
@@ -6,7 +6,7 @@ from django.utils.deprecation import RemovedInDjango110Warning
from
.backends.django
import
Template
as
BackendTemplate
from
.base
import
Template
from
.context
import
Context
,
RequestContext
,
_current_app_undefined
from
.context
import
Context
,
RequestContext
from
.loader
import
get_template
,
select_template
...
...
@@ -190,19 +190,10 @@ class SimpleTemplateResponse(HttpResponse):
class
TemplateResponse
(
SimpleTemplateResponse
):
rendering_attrs
=
SimpleTemplateResponse
.
rendering_attrs
+
[
'_request'
,
'_current_app'
]
rendering_attrs
=
SimpleTemplateResponse
.
rendering_attrs
+
[
'_request'
]
def
__init__
(
self
,
request
,
template
,
context
=
None
,
content_type
=
None
,
status
=
None
,
current_app
=
_current_app_undefined
,
charset
=
None
,
using
=
None
):
# As a convenience we'll allow callers to provide current_app without
# having to avoid needing to create the RequestContext directly
if
current_app
is
not
_current_app_undefined
:
warnings
.
warn
(
"The current_app argument of TemplateResponse is deprecated. "
"Set the current_app attribute of its request instead."
,
RemovedInDjango110Warning
,
stacklevel
=
2
)
request
.
current_app
=
current_app
status
=
None
,
charset
=
None
,
using
=
None
):
super
(
TemplateResponse
,
self
)
.
__init__
(
template
,
context
,
content_type
,
status
,
charset
,
using
)
self
.
_request
=
request
docs/ref/template-response.txt
Dosyayı görüntüle @
5e450c52
...
...
@@ -189,7 +189,7 @@ TemplateResponse objects
Methods
-------
.. method:: TemplateResponse.__init__(request, template, context=None, content_type=None, status=None, c
urrent_app=None, c
harset=None, using=None)
.. method:: TemplateResponse.__init__(request, template, context=None, content_type=None, status=None, charset=None, using=None)
Instantiates a :class:`~django.template.response.TemplateResponse` object
with the given request, template, context, content type, HTTP status, and
...
...
@@ -224,16 +224,6 @@ Methods
``status``
The HTTP status code for the response.
``current_app``
A hint indicating which application contains the current view. See the
:ref:`namespaced URL resolution strategy <topics-http-reversing-url-namespaces>`
for more information.
.. deprecated:: 1.8
The ``current_app`` argument is deprecated. Instead you should set
``request.current_app``.
``charset``
The charset in which the response will be encoded. If not given it will
be extracted from ``content_type``, and if that is unsuccessful, the
...
...
docs/ref/templates/api.txt
Dosyayı görüntüle @
5e450c52
...
...
@@ -194,7 +194,7 @@ Once you have a compiled :class:`Template` object, you can render a context
with it. You can reuse the same template to render it several times with
different contexts.
.. class:: Context(dict_=None
, current_app=_current_app_undefined
)
.. class:: Context(dict_=None)
This class lives at ``django.template.Context``. The constructor takes
two optional arguments:
...
...
@@ -205,11 +205,6 @@ different contexts.
to help :ref:`resolve namespaced URLs<topics-http-reversing-url-namespaces>`.
If you're not using namespaced URLs, you can ignore this argument.
.. deprecated:: 1.8
The ``current_app`` argument is deprecated. If you need it, you must
now use a :class:`RequestContext` instead of a :class:`Context`.
For details, see :ref:`playing-with-context` below.
.. method:: Template.render(context)
...
...
docs/topics/http/shortcuts.txt
Dosyayı görüntüle @
5e450c52
...
...
@@ -15,7 +15,7 @@ introduce controlled coupling for convenience's sake.
``render``
==========
.. function:: render(request, template_name, context=None, context_instance=_context_instance_undefined, content_type=None, status=None,
current_app=_current_app_undefined,
dirs=_dirs_undefined, using=None)
.. function:: render(request, template_name, context=None, context_instance=_context_instance_undefined, content_type=None, status=None, dirs=_dirs_undefined, using=None)
Combines a given template with a given context dictionary and returns an
:class:`~django.http.HttpResponse` object with that rendered text.
...
...
@@ -67,16 +67,6 @@ Optional arguments
``status``
The status code for the response. Defaults to ``200``.
``current_app``
A hint indicating which application contains the current view. See the
:ref:`namespaced URL resolution strategy <topics-http-reversing-url-namespaces>`
for more information.
.. deprecated:: 1.8
The ``current_app`` argument is deprecated. Instead you should set
``request.current_app``.
``using``
The :setting:`NAME <TEMPLATES-NAME>` of a template engine to use for
loading the template.
...
...
docs/topics/http/urls.txt
Dosyayı görüntüle @
5e450c52
...
...
@@ -680,13 +680,6 @@ the fully qualified name into parts and then tries the following lookup:
setting the current application on the :attr:`request.current_app
<django.http.HttpRequest.current_app>` attribute.
.. versionchanged:: 1.8
In previous versions of Django, you had to set the ``current_app``
attribute on any :class:`~django.template.Context` or
:class:`~django.template.RequestContext` that is used to render a
template.
.. versionchanged:: 1.9
Previously, the :ttag:`url` template tag did not use the namespace of the
...
...
tests/shortcuts/tests.py
Dosyayı görüntüle @
5e450c52
...
...
@@ -102,19 +102,9 @@ class ShortcutTests(SimpleTestCase):
response
=
self
.
client
.
get
(
'/render/using/?using=jinja2'
)
self
.
assertEqual
(
response
.
content
,
b
'Jinja2
\n
'
)
@ignore_warnings
(
category
=
RemovedInDjango110Warning
)
def
test_render_with_current_app
(
self
):
response
=
self
.
client
.
get
(
'/render/current_app/'
)
self
.
assertEqual
(
response
.
context
.
request
.
current_app
,
"foobar_app"
)
@ignore_warnings
(
category
=
RemovedInDjango110Warning
)
def
test_render_with_dirs
(
self
):
response
=
self
.
client
.
get
(
'/render/dirs/'
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
content
,
b
'spam eggs
\n
'
)
self
.
assertEqual
(
response
[
'Content-Type'
],
'text/html; charset=utf-8'
)
@ignore_warnings
(
category
=
RemovedInDjango110Warning
)
def
test_render_with_current_app_conflict
(
self
):
with
self
.
assertRaises
(
ValueError
):
self
.
client
.
get
(
'/render/current_app_conflict/'
)
tests/shortcuts/urls.py
Dosyayı görüntüle @
5e450c52
...
...
@@ -18,6 +18,4 @@ urlpatterns = [
url
(
r'^render/dirs/$'
,
views
.
render_with_dirs
),
url
(
r'^render/status/$'
,
views
.
render_view_with_status
),
url
(
r'^render/using/$'
,
views
.
render_view_with_using
),
url
(
r'^render/current_app/$'
,
views
.
render_view_with_current_app
),
url
(
r'^render/current_app_conflict/$'
,
views
.
render_view_with_current_app_conflict
),
]
tests/shortcuts/views.py
Dosyayı görüntüle @
5e450c52
...
...
@@ -109,19 +109,3 @@ def render_view_with_status(request):
def
render_view_with_using
(
request
):
using
=
request
.
GET
.
get
(
'using'
)
return
render
(
request
,
'shortcuts/using.html'
,
using
=
using
)
def
render_view_with_current_app
(
request
):
return
render
(
request
,
'shortcuts/render_test.html'
,
{
'foo'
:
'FOO'
,
'bar'
:
'BAR'
,
},
current_app
=
"foobar_app"
)
def
render_view_with_current_app_conflict
(
request
):
# This should fail because we don't passing both a current_app and
# context_instance:
return
render
(
request
,
'shortcuts/render_test.html'
,
{
'foo'
:
'FOO'
,
'bar'
:
'BAR'
,
},
current_app
=
"foobar_app"
,
context_instance
=
RequestContext
(
request
))
tests/template_tests/templates/test_incl_tag_current_app.html
deleted
100644 → 0
Dosyayı görüntüle @
75374d37
{% load custom %}{% current_app %}
tests/template_tests/templatetags/inclusion.py
Dosyayı görüntüle @
5e450c52
...
...
@@ -166,13 +166,6 @@ def inclusion_only_unlimited_args_from_template(*args):
inclusion_only_unlimited_args_from_template
.
anything
=
"Expected inclusion_only_unlimited_args_from_template __dict__"
@register.inclusion_tag
(
'test_incl_tag_current_app.html'
,
takes_context
=
True
)
def
inclusion_tag_current_app
(
context
):
"""Expected inclusion_tag_current_app __doc__"""
return
{}
inclusion_tag_current_app
.
anything
=
"Expected inclusion_tag_current_app __dict__"
@register.inclusion_tag
(
'test_incl_tag_use_l10n.html'
,
takes_context
=
True
)
def
inclusion_tag_use_l10n
(
context
):
"""Expected inclusion_tag_use_l10n __doc__"""
...
...
tests/template_tests/test_custom.py
Dosyayı görüntüle @
5e450c52
...
...
@@ -6,10 +6,9 @@ from unittest import skipUnless
from
django.template
import
Context
,
Engine
,
TemplateSyntaxError
from
django.template.base
import
Node
from
django.template.library
import
InvalidTemplateLibrary
from
django.test
import
SimpleTestCase
,
ignore_warnings
from
django.test
import
SimpleTestCase
from
django.test.utils
import
extend_sys_path
from
django.utils
import
six
from
django.utils.deprecation
import
RemovedInDjango110Warning
from
.templatetags
import
custom
,
inclusion
from
.utils
import
ROOT
...
...
@@ -270,23 +269,8 @@ class InclusionTagTests(TagTestCase):
self
.
verify_tag
(
inclusion
.
inclusion_only_unlimited_args
,
'inclusion_only_unlimited_args'
)
self
.
verify_tag
(
inclusion
.
inclusion_tag_without_context_parameter
,
'inclusion_tag_without_context_parameter'
)
self
.
verify_tag
(
inclusion
.
inclusion_tag_use_l10n
,
'inclusion_tag_use_l10n'
)
self
.
verify_tag
(
inclusion
.
inclusion_tag_current_app
,
'inclusion_tag_current_app'
)
self
.
verify_tag
(
inclusion
.
inclusion_unlimited_args_kwargs
,
'inclusion_unlimited_args_kwargs'
)
@ignore_warnings
(
category
=
RemovedInDjango110Warning
)
def
test_15070_current_app
(
self
):
"""
Test that inclusion tag passes down `current_app` of context to the
Context of the included/rendered template as well.
"""
c
=
Context
({})
t
=
self
.
engine
.
from_string
(
'{
%
load inclusion
%
}{
%
inclusion_tag_current_app
%
}'
)
self
.
assertEqual
(
t
.
render
(
c
)
.
strip
(),
'None'
)
# That part produces the deprecation warning
c
=
Context
({},
current_app
=
'advanced'
)
self
.
assertEqual
(
t
.
render
(
c
)
.
strip
(),
'advanced'
)
def
test_15070_use_l10n
(
self
):
"""
Test that inclusion tag passes down `use_l10n` of context to the
...
...
tests/template_tests/test_response.py
Dosyayı görüntüle @
5e450c52
...
...
@@ -282,11 +282,6 @@ class TemplateResponseTest(SimpleTestCase):
response
=
TemplateResponse
(
request
,
'template_tests/using.html'
,
using
=
'jinja2'
)
.
render
()
self
.
assertEqual
(
response
.
content
,
b
'Jinja2
\n
'
)
@ignore_warnings
(
category
=
RemovedInDjango110Warning
)
def
test_custom_app
(
self
):
self
.
_response
(
'{{ foo }}'
,
current_app
=
"foobar"
)
self
.
assertEqual
(
self
.
_request
.
current_app
,
'foobar'
)
def
test_pickling
(
self
):
# Create a template response. The context is
# known to be unpickleable (e.g., a function).
...
...
@@ -310,8 +305,12 @@ class TemplateResponseTest(SimpleTestCase):
# ...and the unpickled response doesn't have the
# template-related attributes, so it can't be re-rendered
template_attrs
=
(
'template_name'
,
'context_data'
,
'_post_render_callbacks'
,
'_request'
,
'_current_app'
)
template_attrs
=
(
'template_name'
,
'context_data'
,
'_post_render_callbacks'
,
'_request'
,
)
for
attr
in
template_attrs
:
self
.
assertFalse
(
hasattr
(
unpickled_response
,
attr
))
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment