Фильм был задуман Робертом Родригесом как художественный эксперимент по максимально адекватному переносу на большой экран визуальной стилистики и сюжетов графических романов Фрэнка Миллера средствами игрового (не анимационного) кинематографа. Экранная картинка фильма в основе чёрно-белая и очень контрастная, цветом выделены, как и в романах цикла, отдельные персонажи или связанные с ними детали — цвет глаз, брызги крови и мочи, цвет платья и т. п.
С целью соблюдения полного соответствия фильма первоисточнику Родригес пригласил автора исходных романов Фрэнка Миллера в качестве полноправного сорежиссёра. Один из эпизодов фильма поставил специально приглашённый Квентин Тарантино.
«Город грехов» был коммерчески успешен и хорошо принят критиками, в частности, из-за своего цветового решения. Фильм был показан на Каннском кинофестивале 2005 года и получил Гран-при в номинации «За визуальную заострённость».
Фильм базируется на четырёх работах Миллера: графические новеллы «Трудное прощание» («The Hard Goodbye») — о человеке, который отправляется на поиски убийцы своей возлюбленной, «Большая смачная резня» («The Big Fat Kill») — об уличной войне между группами проституток и наёмников, «Тот жёлтый ублюдок» («That Yellow Bastard») — о бывшем полицейском, защищающем девушку от серийного убийцы и графический рассказ «Клиент всегда прав» («The Customer is Always Right»), который разделён на две части и использован как короткие пролог и эпилог к фильму.
Действие фильма, как и действие цикла романов, разворачивается в вымышленном городе Бэйсин-Сити, который был основан в XIX веке как перевалочный пункт на пути золотоискателей, где они могли продать добычу и отдохнуть с девочками — отсюда и прилепившееся к Бэйсин-Сити прозвище «Город грехов» (Basin City). Власть в городе принадлежит насквозь коррумпированным политикам, которые делят сферы влияния с мафиозными кланами при попустительстве продажной полиции. Сердцем Бэйсин-Сити остаётся Старый город — квартал публичных домов, куда ни мафии, ни полиции лучше не соваться — власть здесь принадлежит проституткам, которые готовы отстаивать свою независимость с оружием в руках.
Фильм состоит из нескольких различных новелл, персонажи которых так или иначе пересекаются.
Новелла первая, которая была снята Родригесом для демонстрации Миллеру, — короткая история о безымянном убийце (Джош Хартнетт), являющемся, по сути, последним романтиком этого города грехов. Собственно, это не отдельная новелла, а маленькое лирическое вступление.
Второй из сюжетов фильма — история Марва (Микки Рурк), уличного громилы. Он просыпается в номере дешёвой гостиницы и обнаруживает, что девушка по имени Голди (Джейми Кинг), с которой он вчера познакомился, мертва, и её убийство хотят «повесить» на него. Марв уходит от преследующих его полицейских и начинает искать настоящих убийц, в стремлении отомстить, не щадя никого из тех, кто замешан в этой истории. Израненный и искалеченный, он добирается до высокопоставленного заказчика убийства, кардинала Рорка (Рутгер Хауэр), жестоко разделывается с ним и кончает жизнь на электрическом стуле.
Третий сюжет — история Дуайта (Клайв Оуэн), боевика, который охраняет проституток Старого города. Повздорив с мерзавцем Джеки-Боем (Бенисио дель Торо), он следует за ним. Пьяный Джеки-бой едет в Старый город, где начинает угрожать проститутке Бекки (Алексис Бледел) пистолетом и погибает от меча проститутки-киллера Михо (Девон Аоки). Однако при нём найден полицейский жетон, а это означает, что перемирие между полицией и проститутками Старого города может рухнуть, и тогда Старый город неизбежно перейдёт под контроль мафиозного Синдиката, который давно к этому стремится. Дуайт и Михо пытаются уничтожить тела Джеки-Боя и его приятелей, но мафия готова на всё, чтобы получить доказательства убийства полицейского в Старом городе, и главным доказательством должна стать голова Джеки-Боя. В итоге всё кончается грандиозной резнёй между проститутками Старого города, Дуайтом и боевиками Синдиката.
Четвёртая новелла — история Хартигана (Брюс Уиллис), одного из немногих честных полицейских Бэйсин-Сити. В последний день перед уходом на пенсию Хартиган преследует маньяка, насилующего и убивающего маленьких девочек. Убийца — Рорк-младший (Ник Стал), единственный сын сенатора Рорка, уверенный в том, что полиция куплена его отцом и ему всё сойдёт с рук. Хартигану удаётся спасти последнюю жертву маньяка — 11-летнюю Нэнси, — и искалечить Рорка-младшего, отстрелив ему ухо, руку и половые органы, но напарник стреляет ему в спину. Не желая рассказывать про единственную свидетельницу Нэнси и подвергать её опасности, Хартиган идёт под суд, отказывается оговорить себя и садится в тюрьму. Единственное, что поддерживает его в эти годы — анонимные письма от Нэнси, которые приходят каждую неделю. Через 8 лет письма перестают приходить, а через два месяца присылают письмо с окровавленным пальцем в конверте, Хартиган решает, что с ней произошла беда. Тогда он соглашается подписать самооговор в обмен на освобождение, надеясь, что на воле он сможет помочь девушке. Оказывается, однако, что его освобождение подстроено, чтобы выживший, но обезображенный Рорк-младший мог найти повзрослевшую Нэнси (Джессика Альба) и отомстить Хартигану, убив её. Хартигану удаётся завершить то, что ему не дали сделать восемь лет назад — он убивает маньяка, а затем пускает пулю себе в голову, чтобы окончательно замести следы, которые могут привести всесильных Рорков к Нэнси.
Фильм заканчивается эпилогом, в котором опять участвует безымянный убийца (Джош Хартнетт), переодетый в доктора. Он встречается в лифте больницы с юной проституткой Бекки (Алексис Бледел), сбежавшей из Старого города.
Существует расширенное издание фильма, длительность которого 2 часа 21 минута. В DVD-издание включены 27 дополнительных минут метража, не вошедшего в прокатную версию. Каждая сюжетная линия оформлена отдельно, с собственными титрами (которые на самом деле составляют около двух третей от заявленных 27 минут), так что их можно посмотреть как самостоятельные среднеметражные фильмы.