12 ms·
Why Is the Django Admin "Ugly"?
- angrymachine 3y ago(Author here) I personally don't think the visual style of the Django admin is ugly. I'd agree that it looks dated, and also agree that it could use a few minor color and accessibility improvements. My perspective is that we have a new generation of Django devs among us, who grew up using fancy JS frameworks, SaaS dashboards, A.I.-assisted code tools, etc. So for a newcomer seeing the Django admin for the first time, it's a bit different. My goal of the article was to capture the tribal knowledge that seems to have not gotten passed down to this new generation.
- rat9988 3y agoI don't see any tribal knowledge being passed on here. It seems django's admin panel is ugly because nobody has interest, enough, in investing to make it beautiful. And you were looking for a fancy answer with wisdom as "it's to discourage its use for consumer blabla" while the obvious answer is the right one. It's ugly and there isn't enough interest to change it, because it works well enough to cover the intended usecases. The other usecases would need more investment, and nobody invested.
- regularfry 3y agoI think there's also the aspect that it wasn't built with ever being restyled in mind. It looks fiddly to make changes to (even if it actually might not be), so people don't feel inclined to dig in.
- hombre_fatal 3y agoIt’s also really hard to change look and feel in a mature product. You have to have a good vision and then fight against a horde of people who have their own ideas, resist change, or will bike shed you into submission. And you need to have good taste and design principles to begin with; it has to be a real upgrade. And it has to be worth it. You don’t just submit a pull request called “Redesign”. The with is more political and organizational in nature
- ThibWeb 3y agoI see three quotes from past contributors in the article, that seems like valuable knowledge to me? Anecdotally as someone who contributes to the Django admin I see the interest is there. I’d say it being clunky is for other reasons (for example there being more back-end developers contributing to the project than other skillsets).
- otteromkram 3y ago> “why is the Django admin so ‘ugly’?”. Not sure if English is your native language, but quotation marks usually land on the outside of any other punctuation. (Yes, it does look goofy.) Now, the quote above is kind of special because you have a portion of it quoted within a statement. However, if you are paraphrasing all but the "ugly" part. In that case, I would drop the outer quotations marks. > why is the Django admin so "ugly?" Bring on the downvotes.
- egypturnash 3y agoA few quotes from the top results on DuckDuckGo for "quotation marks and punctuation": Question marks are a little different. If the question mark is part of the quote, place it inside the quotation marks. If the question mark is not part of the quote, and instead the quote is part of a question, place it outside of the quotation marks. This rule also applies to exclamation points. - https://www.grammarly.com/blog/quotation-marks/ https://www.grammarly.com/blog/quotation-marks/ Place a question mark or exclamation point within closing quotation marks if the punctuation applies to the quotation itself. Place the punctuation outside the closing quotation marks if the punctuation applies to the whole sentence. - https://owl.purdue.edu/owl/general_writing/punctuation/quotation_marks/more_quotation_mark_rules.html https://owl.purdue.edu/owl/general_writing/punctuation/quota... Different varieties and styles of English have different conventions regarding whether terminal punctuation should be written inside or outside the quotation marks. North American printing usually puts full stops and commas (but not colons, semicolons, exclamation or question marks) inside the closing quotation mark, whether it is part of the original quoted material or not.[14][15] Styles elsewhere vary widely and have different rationales for placing it inside or outside, often a matter of house style. - https://en.wikipedia.org/wiki/Quotation_mark https://en.wikipedia.org/wiki/Quotation_mark
- airstrike 3y agoBased on my internet experience (...) and among this particular HN audience, I'd say you're fighting an uphill battle given our collective preference for where to place and how to treat quotes.
- Izkata 3y agoIIRC this is mostly a US/UK distinction (maybe even US/rest of world). I tend towards putting the punctuation outside the quote, especially if the original quote didn't have that punctuation.
- PrimeMcFly 3y agoSeems fine to me. Functional, responsive, clean and easy to understand. Nothing 'ugly' about it.
- shadowgovt 3y agoPeople underestimate the amount of work it takes to tweak aesthetics, much less come up with a coherent design language that is intuitive and straightforward for users to learn. One of the eye openers for me personally was the realization that the Mastodon organization contracted a UX engineer firm. It shows.
- etchalon 3y agoThe only thing uglier than the Django Admin is all the third-party packages which attempt to make it prettier. Grappelli was OK for a short time, but even it's too dated to use now. The number of "What if I used Bootstrap made everything look like a horrible Bootstrap site?" packages is hilarious.
- kfarr 3y agoFunny, 10 years after running a startup powered by Django I still think of the admin as one of the most functional “out of the box” features of any framework I’ve used. Didn’t matter that it wasn’t “beautiful!”
- angrymachine 3y ago100% agree! The best "batteries included" feature. I actually replicated the Django admin in .NET for a client and it blew their mind.
- winrid 3y agoLike this? https://github.com/edandersen/core-admin https://github.com/edandersen/core-admin
- kapitanjakc 3y agoI am working on django a lot. When clients ask me re-design it, I will deny it. I did the re-design of admin panel once, and what we produced was better in design yes, pretty even, but not usable, people got lost in it thinking it's still the main site and not admin panel, and there were only 3 admins, 2 of which were management. In my opinion, it's good as it is.
- syndicatedjelly 3y agoIf you’re using the Django admin as a client-facing UI, you’ve made a huge mistake
- animal_spirits 3y agoThere's a good plugin called django-admin-interface that cleans up the Admin page to a point where it is still recognizable as the admin page but looks nicer. You also can customize the color themes, matching the palette of the app. https://github.com/fabiocaccamo/django-admin-interface https://github.com/fabiocaccamo/django-admin-interface
- Tistel 3y agoDated!? Dated!? You think that is dated looking? Ha! If you want to see dated do an image search for: "Oscar EMR Canada" and you can feast on dated UI. Socialist software forever! Kidding aside, that EMR is used by hundreds of doctors and small hospitals in Canada. Yikes.
- angrymachine 3y agoDated doesn't mean bad. It's just an aesthetic. A dated 1970s kitchen cooks food just as well as a modern one, albeit with a few more fire hazards ;)
- karaterobot 3y agoWhen I saw the Django admin interface however many decades ago, it was a revelation. It was so well executed. I agree that it's dated, but I don't think it's ugly: that's a difference between fashion and beauty, one of them changes every year and the other doesn't.
- angrymachine 3y ago100% agree! And to this day many frameworks do not come with a similar database tool.
- autonomousErwin 3y agoI love the Django admin minimalistic "ugly" feel. I'm there just for information about my database. Nothing else.
- agumonkey 3y agoUgly would be ok, but crippling is the word that comes to mind when I think django. Or maybe I lack mastery or didn't find the right extensions to free myself from the basic admin views for creating ergonomic view on non-simple related models. Inlines are a bit suffocating.
- redder23 3y agoI do not think its Ugly at all, it seems minimalistic, never seen it but compare that to WordPress it seems very relaxing.
- adrianh 3y agoHi, one of the creators of Django here (and of the admin specifically). It was definitely not intended to be ugly — the first version was designed by Wilson Miner, a great designer. In fact, an argument could be made that a key reason for Django's early success was that the admin was so nicely designed. Same goes for the framework's website in general; the standard open-source project website in that era was really plain and uninspiring. To answer "Why is the Django admin ugly?", I think there are two separate issues: * A gradual bolting on of admin features without enough thought given to visual consistency and elegance. Particularly, the left sidebar (in the screenshot of the original article) was a later addition and looks unpolished. * A misunderstanding of the Django admin's goals. It's meant to be for "internal use" — that is, it's meant to be used by people who operate your website, not by people who visit your website. Ever since we open-sourced Django, many people (through either laziness or lack of understanding) misunderstood the point of the Django admin, thinking it's meant to be for end users. It is not and never was.
- ThibWeb 3y agoThanks for chiming in! Do you think it’s desirable for it to stay "ugly" then if it’s for "internal use"? I can understand the admin isn’t meant to have a "consumer" UI but it still feels like there are lots of user experience & accessibility improvements needed to bring it in line with modern standards (WCAG for example).
- Multicomp 3y agoThanks for weighing in. I love it when the subjects and experts of the article at hand weigh in. HN at its finest!
- BeetleB 3y ago> It was definitely not intended to be ugly And it isn't! I started using Django in the days when it was in perpetual Beta - back in 2008. It was not ugly by the standards of those days. After over a decade's hiatus, I'm back to using Django for paid work. And I still find it "not ugly". Sure, it doesn't have bells and whistles, but it's pretty functional, and doesn't offend my aesthetics at all! PS. I owe a lot to you, Jacob and Simon - thanks for Django! My funding in grad school was drying up, and I needed a side job out of my department to help pay bills. And fortunately, one team at the university was looking for a Django programmer. I was not a CS major, but knew enough programming to get that job.
- hk1337 3y agoGoing by the screenshot they posted, I don't think it's ugly. It's not the fancy JS frontend we're probably expecting these days but it's nice and it's usable.
- bityard 3y agoTo me, a UI is beautiful when it does what it's supposed to do with a minimum amount of effort and cognitive overhead from the user. Aesthetics have zero to do with that and attempts from designers to make something "pretty" usually subtract from functionality. Tools like Django Admin are not an art project, they are meant to do a job.
- SPBS 3y agoIf Django Admin is ugly, then everything I make is uglier.
- BeetleB 3y agoDoes Django admin work with Lynx/Links/Elinks? If yes, it's probably better than 95% of other admins.
- allanrbo 3y agoI always thought it was quite nice actually. Maybe I have bad taste :-D
- cyclotron3k 3y agoA lot of people in this thread seem to think beautiful UI and functional UI are mutually exclusive.
- orsenthil 3y agoDjango admin is the like wordpress admin console. It is for users who administer the website.
- vasdae 3y agoWhat's ugly about it? I'm looking at the screenshot and it looks perfectly fine to me?
- stuckinhell 3y agoIt gets extremely ugly and clunky when you edit related tables/models together in one view using their builtin inlineadmins. The devil is the details for real world usage on your data and it's relationships.
- vladvasiliu 3y agoNo five-level hamburger menu, you can actually see stuff without scrolling and panning. And, probably, the most horrific of all: the text has enough contrast so you can actually read it!
- Euphorbium 3y agoI think it is lacking infinite scroll /s
- ThibWeb 3y agoText contrast is actually one of the most common issues with the Django admin. Just on the screenshot in the article, the white text against the light blue breadcrumb and nav headers background is too low contrast as per WCAG 2.0 calculations.
- ThibWeb 3y ago"Ugly" might not be the best one-word description but there are a lot of basic accessibility issues with the Django admin. The general user experience could also really benefit from using more modern design patterns (for example modal windows over pop-up windows).
- modo_mario 3y agoWhy would modal windows be better than pop-up ones?
- blitzar 3y agoI am certain that if the end user really really cared, a few css tweaks would make if web 3.0 beautiful
- _joel 3y agoIt isn't. It's simple and functional and designed for its purpose of being a starting point UI bundled with the framework. You can extend with other admin interfaces really easily, but including that as default adds bloat for users that don't need that extra eye candy.
- ThibWeb 3y agoIt is certainly simple but I’d disagree it’s functional _enough_, because of the numerous basic accessibility issues with the fundamental UI components. On extending the admin – perhaps there’s something to be said about the admin coming with more UI components built-in? For example it lacks any dialog / modal window implementation, or an "accordion" / disclosure pattern. Or things like support for keyboard shortcuts.
- 542458 3y agoIsn’t part of the point of the article that it is not a starting point UI? “[The admin] is not intended for building your entire front end around.” Or have a misunderstood what the author is saying?
- 3c6bYDXLMj 3y agoYep. You’re on the money. Look at it this way. The product I worked on got acquired, and we went from a 5 person bootstrapped company that knew the product intimately, to all sorts of far less familiar customer support, sales, etc people needing to do various sorts of “admin” actions. I flat-out refused to subject these newbies to Django admin, and prioritised building proper administrative tooling. That decision has paid dividends. Django admin by its nature is always going to expose idiosyncrasies of your data model and by its own admission doesn’t give you infinite opportunity to insert your business logic layer. Cue someone used to working in “scale until you die” startups telling me that any time not spend on juicing MAU is time wasted. I like working in sustainable businesses. I’ve worked with Django for a decade. I’ve done ungodly things with Django admin. Things most people wouldn’t dream of. I am completely over doing any of that. This isn’t a fault of Django admin. It’s very good at doing what it’s intended to do. It’s just a very common beginner’s trap to try to push it further than it wants to go. There’s plenty to critique Django admin for. I fought with it just last week. At the same time, most complaints I see about it tend to be people (IMO) misusing it. It’s the service panel. And yes, people other than the engineers that built the thing have reason to pop open the service panel. These are your mechanics. But, and especially for SaaS products, don’t conflate “user” with “customer”, and not think about your other audiences.
- Waterluvian 3y agoThe most brilliant thing about it is how simple and plain it is. I was a dev team of one for years and basically got a mountain of free work because the admin panel exists and is generic enough not to be weird for internal company users. The simplicity also makes extension simple. I could add a few features.
- rossdavidh 3y agoThe django admin looks way better to me than most websites with more fashionable interfaces.
- mdasen 3y agoI actually love the way the Django Admin UI looks, but it does go against the grain of the current trends in UI design by being a bit explicit. For example, the "add post" button looks like a button rather than just being words and there are borders demarcating boundaries between sections. I think it's both good looking and a lot more usable than the current trends in UI design which favor minimalism to the point that it can be hard to discern what is clickable.
- efdee 3y agoI too dislike the current UI trends and I still think Django Admin is an ugly piece of software. It was ugly 10 years ago and it's still ugly today. It gets a lot of simple design things like margins very wrong. It's purely visual though. It's a great piece of software to get out of the box.
- Klonoar 3y agoOpen source software and not nailing margins/padding - name a more classic combo. All joking aside, I like that the Django admin still looks the same after almost 20 years. Cannot begin to impart how much value that thing has provided me.
- epistasis 3y agoAgreed. If the rest of new sites looked more like Django admin and less like current trends, I certainly would like the web a lot more. I'm soooooo sick of React doing completely hostile things like flashing incorrect information for empty widgets or completely breaking page location when hitting the back button. Seems like every few years it becomes accepted to make the web worse for users because of front end fashions.
- michaelmior 3y ago> I'm soooooo sick of React doing completely hostile things This isn't really React's fault. Avoiding the things you mention is entirely possible when using React. It's all up to the developer to handle such scenarios, just as it was without React.
- matsemann 3y agoI've been places where the admin tool ends up being a frontend for the backend. Like you get so much for free, so it's tempting to just add a simple widget to extend the admin with one small feature you're missing to make it possible to edit whatever. Instead of building a dedicated frontend for it. So then you give editors or whatever access to modify stuff there. And then they request some changes, and rather than building a frontend from scratch you again tweak the admin panel for some model. And suddenly you've got tens of people doing their daily work in the admin panel and a mess you will have a hard time getting out of. It being ugly is a feature. Don't fall for the temptation of giving non-devs access! (But it could have kept it's look while still being more friendly to use, though. So many huge selects and difficulties to fill in valid data in some cases)
- otherme123 3y agoHappened to me: a coworker asked for help while using a webapp where she needed to upload some files and fill some forms, but the frontend was confusing for her. When she opened the web... it was the Django Admin! The programmer just coded the models, put them in the admin.py and gave everybody "staff" status.
- lelandbatey 3y agoYou're very right, "the Django Admin is so useful that we use it for everything" seems like key context that's being under-discussed in this thread. Most all of the user-complaints in the linked sources seem to focus on how people are using the Django Admin for many many things and "just want to make small changes" or "they just want validation to be better" or they "want it to look nicer for our customers (!!!)", and they want that because the Django Admin is so useful and ubiquitous that they seem to be trying to use it for everything.
- xet7 3y agoIs this because not everything has rounded corners? Only one rounded button?
- paddy_m 3y agoI think the django admin is quite an accomplishment of software engineering and functionality. The amount of functionality you can build quickly is impressive. Sure it might not have the slickest UI, but a lot of those slick frontend features in modern UIs have half thought out semantics and take ages to implement vs django. Django lets you concentrate on the actual business problem , but becomes painful to do extreme customization on. There are multiple styling extensions for django that help. I think there is Trader UI, and VC UI. Trader UI, built for wall st packs every bit of information into every pixel possible. VC UI has rounded corners, nice fonts, drop shadows and half the information on the screen. Django UI actually splits the difference nicely.
- maw 3y agoWhat are Trader and VC UI? I searched for them and once I got specific enough I got this comment as the first result.
- kccqzy 3y agoYou can just go download some trading software like thinkorswim or IBKR TWS to see what's trader UI. VC UI probably means some UI in a VC-funded company whose goal is to reach high number of users as quickly as possible, and the UI is optimized for that goal.
- paddy_m 3y agoExactly. A more charitable way of putting it is, you can make a pretty presentation when you know the data that you are trying to present and the story you are trying to tell. I can't imagine a 3 column pricing table that wasn't done in bootstrap (Venture Capital UI) Traders look at screens searching for meaning across a bunch of different data. They are trying to construct a story and as much context as possible is important. The problem comes when VC UI is applied to a Trader problem where you want to see as much information as possible to understand, but there is padding, rounded corners and other stuff forcing you to scroll.
- paddy_m 3y ago
- coffeefirst 3y agoOn the contrary, I wish more of the software I had to use every day worked more like the Django admin. Is it the shiniest UI? No, but a well configured Django admin is a power tool that stays out of your way.
- k_bx 3y agoI'm building a small startup and wanted to have some semi-automatically generated admin for it. After looking at all the modern React-based solutions, Django still looked like the easiest way to go. Ugly and non-SPA? Sure. But still very simple to keep working, google has answers to most little tweaks one wants, and easy to manage. Loving it.
- stuckinhell 3y agoIt depends on your skillsets, but I'd highly recommend https://directus.io/ https://directus.io/ especially if you need "slickness" to raise money otherwise try a pyhat stack if you hate javascript.
- closewith 3y agoDjango REST Framework and your SPA of choice is a great combination.
- 3c6bYDXLMj 3y agoUntil you run into one of the many poor design decisions that DRF has painted itself into a corner with and has been carrying with it ever since. Django Ninja is a breath of fresh air.
- wodenokoto 3y agoI thought the screenshot looked rather pleasant.
- chefandy 3y agoIn UI design, developers perennially mistake the aesthetics of a design with how well the design functions, generally. Interfaces are a form of communication, and the most important pieces of it are things like visual hierarchy, gestalt, and implied lines to show relationships between elements. Just like any other sort of communication, lay people tend to either say all the right things in a way most people find confusing, or not say enough because the other way is too confusing and assume the problem is what's being communicated rather than how it was communicated. Developers putting an interface together ad-hoc tend to do the former, blowing off complaints as people not trying hard enough or reading the docs or whatever. Other developers trying to gussy up the mess the first developer made assuming the problem is aesthetic tend to do the latter, and dismiss complaints by saying things like 'design is subjective' entirely disregarding the possibility that they did a bad job. An aesthetically pleasing interface is a side effect of someone fluent in that language working hard to figure out how to communicate information, action, cause and effect, etc to the end user. It's not an easy language to learn, it's important even in relatively trivial cases, and developers trying to wing it are about as good at it as designers cargo-cult assembling PHP to modify a WordPress deployment: It might get the job done in a very basic way, but nobody should convince themselves it's a real solution. Just like a developer might look at their interface and say "read the docs" or "design is subjective," that designer might see how slow their 5-deep for looped set of database queries is and say "this server is too slow" or "why can't those damned developers make WordPress faster?"
- anonzzzies 3y agoSo why does everything look the same (even to the same colours, locations (responsive & fixed) and sizes) after spending all that money and effort? And when something looks/behaves different, 'normal' (not in IT) people find it annoying to use? How can my wife find trivial operations in our shite IT banking site, but is lost on Instagram for some of the same settings? Our bank has an IT spending which is a rounding error on Insta's budget. I agree with what you say somewhat, but I believe about the massive difference between UI/UX. If I have to sign up to something for the first time or have to buy something, I want pretty pictures. If I have to work with something often (all day let's say), I want UX and I couldn't give a shite about UI; I want things easy to find, fast (not latency) etc. Combined would be great, but tell me what has that, because I always see one, never both done to perfection. If there is a 50/50 mix, it's usually annoying as hell on both sides. My most productive interfaces are ugly as hell ; no animations, no overhead and everything crammed on a screen and very fast. I would never 'sign up' for an application like that seeing it first, but I would never use any application long term for productivity like most people say is 'beautiful' because it's inefficient.
- tjrgergw 3y agoDjango Admin is pretty cool. It's not uncommon when starting a new project that I pick Django just to have Admin, and then ignore its usual views altogether.
- ruslan_talpa 3y agowhat other stack would you pick if it also had admin?
- tjrgergw 3y agoI don't know, but also this is not a question that interests me. I'm not looking for tech for the sake of tech. I'm looking to solve my problems, and this solves my problems - that's all I care about.
- cwales95 3y agoI’ve never thought the changing admin interface was ugly. A bit simple compared to others but sleek and pretty usable. No odd surprises.
- stuckinhell 3y agoDjango is an artifact from another time period of the web, and I'd argue it's in decline. If you want an admin wrapper around your database, you have better many modern alternatives (I use directus). If you want low code and easy platform, you have bubble.io. If you want an easy api for your database, you can use things like hasura. If you want python frameworks, try fastapi (its third party admin is great). If you want an orm, sqlalchemy gives you more bang for your buck. Many of Django's third party packages are out of date. The data science python community has settled on Gradio. The sweet spot of Django seems to have disappeared. Jobs for Django are lower paying, and often more high stress than .net or other languages. Django has a great outreach with it's Django Girls, Afro-Django and Django Foundation. However I feel like it's technical side needs far more love, the source code needs some major refactoring and cleanup. I thought about this indepth on whether to send my daughter to django girls, or just train her in .net and c# myself.
- vb-8448 3y ago> Django is an artifact from another time period of the web, and I'd argue it's in decline. If it's able to survive other 3 or 5 years, I'd argue the pendulum will just swing back to the "django's way". > If you want an admin wrapper around your database, you have better many modern alternatives (I use directus). If you want low code and easy platform, you have bubble.io. If you want an easy api for your database, you can use things like hasura. If you want python frameworks, try fastapi (its third party admin is great). If you want an orm, sqlalchemy gives you more bang for your buck. And your requirements.txt or poetry.lock file grows and grows. The thing I really like about django is that I don't need any external packages to start. I have basically everything I need to start inside a single package and don't need to bother about how to integrate sqlalchemy with flask, how to add auth and authorization to my stack or how to check that all of my tens of dependencies are safe and regularly updated. The only thing I really miss is something like LiveView. I know there's htmx and similar, but i hope they will be some "official way".
- Nextgrid 3y agoWhat you mention as weaknesses would be considered strengths by other people though. I'm sure it's indeed possible to replace every single bit of Django functionality with a third-party package or service, but there's value in not having to do that.
- malkosta 3y agoI agree…it could be better if it had no css/js
- xnx 3y agoI wish more sites were "ugly" like Django Admin, Craigslist, and Hacker News. We end up with visually "slick", but low usability, interfaces elsewhere because frontend designers can learn a million different frameworks, but you can't teach taste.
- hdlothia 3y agoI like pocketbase because it's basically Django admin with an easier deployment story
- norwalkbear 3y agoAny more thoughts on pocketbase.
- hdlothia 3y agoI like it so far, I've used it for my personal projects but it hasn't even hit 1.0 and is basically only developed by one guy, so there are still major dangers with using it. Very easy to get started though, and even comes with stuff like cron jobs and email sending triggers built in and able to use in super simple manner https://pocketbase.io/docs/js-jobs-scheduling/ https://pocketbase.io/docs/js-jobs-scheduling/ according to his benchmark you can serve 10,000 realtime connections on a 4 dollar a month server https://pocketbase.io/faq https://pocketbase.io/faq. my basic deployment was just rsyncing my pocketbase folder into my vps and creating a systemd service. i'm now adding some github actions and docker files but it might not be necessary https://www.programonaut.com/pocketbase-as-a-framework-deploy-with-front-and-backend/ https://www.programonaut.com/pocketbase-as-a-framework-deplo...
- isleyaardvark 3y agoIs it just me or does the Wagtail ModelAdmin replacement look much worse than the default Django admin?
- angrymachine 3y agoWagtail ModelAdmin is kind of a separate beast. It sits alongside the admin. It's not exactly a replacement, but is more of an end-user tool, whereas the Django admin is more of a developer tool. For managing more complicated models such as those with foreign keys, exporting a list of objects to Excel, etc. it can be a bit easier to use for the average office worker.
- harry_ord 3y agoAfter reading all of the post I'm a little confused as to what's wrong with it. It looks fine for a UI bundled with a webframework. I can understand some of the comments in the thread mentioning accessibility issues due to colour/contrast(only example I saw in the comments here)
- draw_down 3y ago[dead]