cuducos / django-public-admin Goto Github PK
View Code? Open in Web Editor NEW๐ A public and read-only version of the Django Admin
License: MIT License
๐ A public and read-only version of the Django Admin
License: MIT License
Reverse for 'logout' not found. 'logout' is not a valid view function or pattern name.
Environment:
Request Method: GET
Request URL: http://localhost:8000/dashboard/
Django Version: 4.1.3
Python Version: 3.9.19
Installed Applications:
['whitenoise.runserver_nostatic',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'django.contrib.admin',
'django.forms',
'django_celery_beat',
'import_export',
'failures.articles.apps.ArticlesConfig',
'failures.parameters.apps.ParametersConfig',
'debug_toolbar',
'django_extensions']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.common.BrokenLinkEmailsMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware']
Template error:
In template /usr/local/lib/python3.9/site-packages/django/contrib/admin/templates/admin/base.html, error at line 58
Reverse for 'logout' not found. 'logout' is not a valid view function or pattern name.
48 : {% endif %}
49 : {% if user.is_active and user.is_staff %}
50 : {% url 'django-admindocs-docroot' as docsroot %}
51 : {% if docsroot %}
52 : <a href="{{ docsroot }}">{% translate 'Documentation' %}</a> /
53 : {% endif %}
54 : {% endif %}
55 : {% if user.has_usable_password %}
56 : <a href="{% url 'admin:password_change' %}">{% translate 'Change password' %}</a> /
57 : {% endif %}
58 : <form id="logout-form" method="post" action=" {% url 'admin:logout' %} ">
59 : {% csrf_token %}
60 : <button type="submit">{% translate 'Log out' %}</button>
61 : </form>
62 : {% endblock %}
63 : </div>
64 : {% endif %}
65 : {% endblock %}
66 : {% block nav-global %}{% endblock %}
67 : </div>
68 : {% endblock %}
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/usr/local/lib/python3.9/site-packages/django/core/handlers/base.py", line 220, in _get_response
response = response.render()
File "/usr/local/lib/python3.9/site-packages/django/template/response.py", line 114, in render
self.content = self.rendered_content
File "/usr/local/lib/python3.9/site-packages/django/template/response.py", line 92, in rendered_content
return template.render(context, self._request)
File "/usr/local/lib/python3.9/site-packages/django/template/backends/django.py", line 62, in render
return self.template.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 175, in render
return self._render(context)
File "/usr/local/lib/python3.9/site-packages/django/test/utils.py", line 111, in instrumented_test_render
return self.nodelist.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 157, in render
return compiled_parent._render(context)
File "/usr/local/lib/python3.9/site-packages/django/test/utils.py", line 111, in instrumented_test_render
return self.nodelist.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 157, in render
return compiled_parent._render(context)
File "/usr/local/lib/python3.9/site-packages/django/test/utils.py", line 111, in instrumented_test_render
return self.nodelist.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/defaulttags.py", line 322, in render
return nodelist.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 63, in render
result = block.nodelist.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 63, in render
result = block.nodelist.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/defaulttags.py", line 322, in render
return nodelist.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 63, in render
result = block.nodelist.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/defaulttags.py", line 472, in render
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "/usr/local/lib/python3.9/site-packages/django/urls/base.py", line 88, in reverse
return resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/django/urls/resolvers.py", line 828, in _reverse_with_prefix
raise NoReverseMatch(msg)
Exception Type: NoReverseMatch at /dashboard/
Exception Value: Reverse for 'logout' not found. 'logout' is not a valid view function or pattern name.
Even with pytest-django
installed, tests in tests/
directory fails with ImproperlyConfigured
exception.
Thus, this issue involves at least two things:
I'm afraid this package might block a kind of request Django import / export does. We need to investigate this further to make sure both packages work well with each other.
Maybe we need an adapted version of admin/base_site.html
to remove user and login information from the top right corner (for example, as in Jarbas).
The ideal way to test it, in my humble opinion, is to use this package in Jarbas. The roadmap would look like this:
jarbas/public_admin
directorypublic_admin.PublicAdminSite
in jarbas/dashboard/admin.py
(public_apps
would be ("chamber_of_deputies",)
and public_models
would be ("reimbursement",)
I added public_admin
above django.contrib.admin
as instructed on https://django-public-admin.readthedocs.io/en/latest/usage.html#templates
I am definitely not the right person to take this task on, but I would like to have someone with a security background to do a security check on Django Public Admin and flag possible issues introduced by this package โ and not already present in Django or other parts of the stack.
For admin I can override the site metadata as follows:
admin.site.site_header = 'your_header'
admin.site.site_title = 'site_title'
admin.site.index_title = 'index_title'
But it seems like public_admin
has not site
. Is there a way to adjust this metadata?
Since the django-admin
is public and no actions are taken by users, it makes sense to get the box "Recent Actions" removed.
According to @cuducos's tip here, we can get it done by using display: none
: this template uses dashboard.css
that has a display: none
.
When i try to install poetry install
with the pyproject.toml above:
[tool.poetry]
name = "poeta"
version = "0.1.0"
description = ""
authors = ["Urahara"]
[tool.poetry.dependencies]
python = "^3.6"
django = "3.0.8"
django-public-admin = "^0.0.2"
[tool.poetry.dev-dependencies]
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
Result:
Updating dependencies
Resolving dependencies... (0.4s)
[SolverProblemError]
Because no versions of django-public-admin match >0.0.2,<0.0.3
and django-public-admin (0.0.2) depends on django (>=2.0.0,<3.0.0), django-public-admin (>=0.0.2,<0.0.3) requires django (>=2.0.0,<3.0.0).
So, because poeta depends on both django (3.0.8) and django-public-admin (^0.0.2), version solving failed.
Slightly modifying to use the latest 2.x release of django i able to use without problems:
[tool.poetry]
name = "poeta"
version = "0.1.0"
description = ""
authors = ["Urahara"]
[tool.poetry.dependencies]
python = "^3.6"
django = "2.2.14"
django-public-admin = "^0.0.2"
[tool.poetry.dev-dependencies]
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
Result:
Updating dependencies
Resolving dependencies... (2.8s)
Writing lock file
Package operations: 4 installs, 0 updates, 0 removals
- Installing pytz (2020.1)
- Installing sqlparse (0.3.1)
- Installing django (2.2.14)
- Installing django-public-admin (0.0.2)
Since the tests are not working yet with pytest
, I'll be tackling this, as @cuducos suggested: maybe using pytest-django
I'm cannot recall what's the role of this "admin"
here, and I started to wonder whether it should be parametrized, changed or just kept this way:
django-public-admin/public_admin/sites.py
Line 47 in 5309e58
When having models=()
and registering the models itself on public_admin
, it works. All registered models are shown (DadosAbertosDeFeira/maria-quiteria#114).
Is it a bug or a feature? ๐
public_app = PublicApp("datasets", models=())
public_admin = MariaQuiteriaPublicAdminSite(public_apps=public_app)
models_and_admins = [
(CityCouncilAgenda, CityCouncilAgendaAdmin),
(CityCouncilAttendanceList, CityCouncilAttendanceListAdmin),
(CityCouncilExpense, CityCouncilExpenseAdmin),
(CityCouncilMinute, CityCouncilMinuteAdmin),
(Gazette, GazetteAdmin),
(CityHallBid, CityHallBidAdmin),
]
for model, admin in models_and_admins:
public_admin.register(model, admin)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.