forked from django/django
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fixed django#10941 -- Added {% query_string %} template tag.
- Loading branch information
Showing
4 changed files
with
218 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
from django.http import QueryDict | ||
from django.template import RequestContext | ||
from django.test import RequestFactory, SimpleTestCase | ||
|
||
from ..utils import setup | ||
|
||
|
||
class QueryStringTagTests(SimpleTestCase): | ||
def setUp(self): | ||
self.request_factory = RequestFactory() | ||
|
||
@setup({"query_string_empty": "{% query_string %}"}) | ||
def test_query_string_empty(self): | ||
request = self.request_factory.get("/") | ||
template = self.engine.get_template("query_string_empty") | ||
context = RequestContext(request) | ||
output = template.render(context) | ||
self.assertEqual(output, "") | ||
|
||
@setup({"query_string_non_empty": "{% query_string %}"}) | ||
def test_query_string_non_empty(self): | ||
request = self.request_factory.get("/", {"a": "b"}) | ||
template = self.engine.get_template("query_string_non_empty") | ||
context = RequestContext(request) | ||
output = template.render(context) | ||
self.assertEqual(output, "?a=b") | ||
|
||
@setup({"query_string_multiple": "{% query_string %}"}) | ||
def test_query_string_multiple(self): | ||
request = self.request_factory.get("/", {"x": "y", "a": "b"}) | ||
template = self.engine.get_template("query_string_multiple") | ||
context = RequestContext(request) | ||
output = template.render(context) | ||
self.assertEqual(output, "?x=y&a=b") | ||
|
||
@setup({"query_string_replace": "{% query_string a=1 %}"}) | ||
def test_query_string_replace(self): | ||
request = self.request_factory.get("/", {"x": "y", "a": "b"}) | ||
template = self.engine.get_template("query_string_replace") | ||
context = RequestContext(request) | ||
output = template.render(context) | ||
self.assertEqual(output, "?x=y&a=1") | ||
|
||
@setup({"query_string_add": "{% query_string test_new='something' %}"}) | ||
def test_query_string_add(self): | ||
request = self.request_factory.get("/", {"a": "b"}) | ||
template = self.engine.get_template("query_string_add") | ||
context = RequestContext(request) | ||
output = template.render(context) | ||
self.assertEqual(output, "?a=b&test_new=something") | ||
|
||
@setup({"query_string_remove": "{% query_string test=None a=1 %}"}) | ||
def test_query_string_remove(self): | ||
request = self.request_factory.get("/", {"test": "value", "a": "1"}) | ||
template = self.engine.get_template("query_string_remove") | ||
context = RequestContext(request) | ||
output = template.render(context) | ||
self.assertEqual(output, "?a=1") | ||
|
||
@setup( | ||
{"query_string_remove_nonexistent": "{% query_string nonexistent=None a=1 %}"} | ||
) | ||
def test_query_string_remove_nonexistent(self): | ||
request = self.request_factory.get("/", {"x": "y", "a": "1"}) | ||
template = self.engine.get_template("query_string_remove_nonexistent") | ||
context = RequestContext(request) | ||
output = template.render(context) | ||
self.assertEqual(output, "?x=y&a=1") | ||
|
||
@setup({"query_string_list": "{% query_string a=my_list %}"}) | ||
def test_query_string_add_list(self): | ||
request = self.request_factory.get("/") | ||
template = self.engine.get_template("query_string_list") | ||
context = RequestContext(request, {"my_list": [2, 3]}) | ||
output = template.render(context) | ||
self.assertEqual(output, "?a=2&a=3") | ||
|
||
@setup({"query_string_query_dict": "{% query_string request.GET a=2 %}"}) | ||
def test_query_string_with_explicit_query_dict(self): | ||
request = self.request_factory.get("/", {"a": 1}) | ||
output = self.engine.render_to_string( | ||
"query_string_query_dict", {"request": request} | ||
) | ||
self.assertEqual(output, "?a=2") | ||
|
||
@setup( | ||
{"query_string_query_dict_no_request": "{% query_string my_query_dict a=2 %}"} | ||
) | ||
def test_query_string_with_explicit_query_dict_and_no_request(self): | ||
context = {"my_query_dict": QueryDict("a=1&b=2")} | ||
output = self.engine.render_to_string( | ||
"query_string_query_dict_no_request", context | ||
) | ||
self.assertEqual(output, "?a=2&b=2") | ||
|
||
@setup({"query_string_no_request_no_query_dict": "{% query_string %}"}) | ||
def test_query_string_without_request_or_explicit_query_dict(self): | ||
msg = "'Context' object has no attribute 'request'" | ||
with self.assertRaisesMessage(AttributeError, msg): | ||
self.engine.render_to_string("query_string_no_request_no_query_dict") |